Android应用 中英文切换

今天才从别人博客上学来的,浅谈一下我的看法

代码可以从那位大神的博客上下载:

http://download.csdn.net/detail/qcooler/7052849


Android应用 中英文切换_第1张图片
①:在res目录下建立values-en和values-zh-rCN文件,并各在每个文件下建立一个strings.xml文件,格式可以参考values/strings.xml。

values-en/strings.xml:

version="1.0" encoding="utf-8"?>

    <string name="app_name">LanguageSettingstring>
    <string name="action_settings">Settingsstring>
    <string name="hello_world">Hello world!string>
    <string name="chinese_btn">chinesestring>
    <string name="english_btn">englishstring>
    <string name="yellow">yellowstring>
    <string name="red">redstring>
    <string name="gray">graystring>
    <string name="green">greenstring>
    <string name="orange">orangestring>
    <string name="blue">bluestring>
    <string name="black">blackstring>

values-zh-rCN/strings.xml:

version="1.0" encoding="utf-8"?>


    <string name="app_name">语言设置string>
    <string name="action_settings">设置string>
    <string name="hello_world">嗨 世界string>
    <string name="chinese_btn">中文string>
    <string name="english_btn">英文string>
    <string name="yellow">黄色string>
    <string name="red">红色string>
    <string name="gray">灰色string>
    <string name="green">绿色string>
    <string name="orange">橙色string>
    <string name="blue">蓝色string>
    <string name="black">黑色string>

②Androidmainfest.xml:

"com.example.languagesetting.MainActivity"
            android:configChanges="locale"
            -- 注意上面的一句话-->
            android:label="@string/app_name" >
        

③:在主布局文件中添加两个按钮,一个用来换成中文,一个用来换成英文
④:在MainActivity文件中:

public class MainActivity extends Activity {
    private Configuration config;
    private DisplayMetrics dm;
    private Resources resources;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        resources = getResources();// 获得res资源对象
        config = resources.getConfiguration();// 获得设置对象
        dm = resources.getDisplayMetrics();
        ((Button) findViewById(R.id.chinese_btn))
                .setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        // TODO Auto-generated method stub
                        config.locale = Locale.SIMPLIFIED_CHINESE;
                        resources.updateConfiguration(config, dm);
                        onCreate(null);
                        /*如果产生了其他的bug,用“recreate()”试试,具体解释向下看*/
                    }
                });

        ((Button) findViewById(R.id.english_btn))
                .setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        // TODO Auto-generated method stub
                        config.locale = Locale.US;
                        resources.updateConfiguration(config, dm);
                        onCreate(null);
                        /*如果产生了其他的bug,用“recreate()”试试,具体解释向下看*/
                    }
                });
    }

}

MainActivity中的代码还没看懂嘿嘿

好像一般情况下,一个按钮控制中英文转换的,刚才我试了一下用sharepreference辅助加一个switch实现的,一开始我没有用switch而是用的if,但是就是实现不了看了半天也不是逻辑的问题,我觉得应该是oncreate()方法有点其他的猫腻,等偶解决了,再放代码~~

先传个switch的:

①先声明一个变量:
SharedPreferences sp = this.getSharedPreferences(“zwq”, Activity.MODE_PRIVATE);
②上传一个数据:
sp.edit().putString(“zwq”, “1”).commit();

③然后在一个按钮监听中添加以下代码:

switch (sp.getString("zwq", "1")) {
                        case "1":
                            sp.edit().putString("zwq", "0").commit();
                            config.locale = Locale.US;
                            resources.updateConfiguration(config, dm);
                            onCreate(null);
                            /*如果产生了其他的bug,用“recreate()”试试,具体解释向下看*/
                            break;
                        case "0":
                            sp.edit().putString("zwq", "1").commit();
                            config.locale = Locale.SIMPLIFIED_CHINESE;
                            resources.updateConfiguration(config, dm);
                            onCreate(null);
                            /*如果产生了其他的bug,用“recreate()”试试,具体解释向下看*/
                            break;
                        }

关于SharePreferences的更多知识点可以看我以前的博客哦


关于oncreate(null)这个方法很愁人,用这个方法不就相当于多启动了一个Activity,大部分的情况下是没有问题的。但是比如我用了画折线,跟oncreate密切相关的,结果就是两个Activity一起执行了。其实中英文转换了之后再刷新一个Activity就可以了,这个时候可以用recreate()来避免这个错误,重启当前Acitivty。重启的时候屏幕会闪一下的哦~

你可能感兴趣的:(android)