Android应用 中英文切换

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

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

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


这里写图片描述
①:在res目录下建立values-en和values-zh-rCN文件,并各在每个文件下建立一个strings.xml文件,格式可以参考values/strings.xml。

values-en/strings.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">LanguageSetting</string>
    <string name="action_settings">Settings</string>
    <string name="hello_world">Hello world!</string>
    <string name="chinese_btn">chinese</string>
    <string name="english_btn">english</string>
    <string name="yellow">yellow</string>
    <string name="red">red</string>
    <string name="gray">gray</string>
    <string name="green">green</string>
    <string name="orange">orange</string>
    <string name="blue">blue</string>
    <string name="black">black</string>
</resources>

values-zh-rCN/strings.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <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>
</resources>

②Androidmainfest.xml:

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

③:在主布局文件中添加两个按钮,一个用来换成中文,一个用来换成英文
④:在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。重启的时候屏幕会闪一下的哦~
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值