Android实现多语言+app内切换语言效果

Android资源文件实现国际化多语言设置+App内切换语言(简)[1]

本文通过介绍在Android系统中,如何添加多语言文件,并通过config类修改应用系统语言,某些步骤过于简单,可跳过
1、添加语言文件
2、自定义语言操作类
3、简单视图层
  1. 添加语言资源文件
    在res下value文件中新建“new>Values resource file”
    新建多语言文件
    选择语言在新的资源文件中添加对应字符
    添加对于语言字符

  2. 新建语言操作类(LanguageUtilsActivity),在LanguageUtilsActivity中(1)语言切换;(2)记住语言偏好设置;(3)内部类PreferenceUtil,简单操作SharedPreferences。代码如下:

public class LanguageUtilsActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //初始化PreferenceUtil
        PreferenceUtil.init(this);
        //根据上次的语言设置,重新设置语言
        switchLanguage(PreferenceUtil.getString("language", "en"));
    }

    protected void switchLanguage(String language) {
        //设置应用语言类型
        Resources resources = getResources();
        Configuration config = resources.getConfiguration();
        DisplayMetrics dm = resources.getDisplayMetrics();
        if (language.equals("en")) {
            config.locale = Locale.ENGLISH;
        } else {
            config.locale = Locale.SIMPLIFIED_CHINESE;
        }
        resources.updateConfiguration(config, dm);

        //保存设置语言的类型
        PreferenceUtil.commitString("language", language);
    }
  public static class PreferenceUtil{
        protected static SharedPreferences mSharedPreferences=null;
      private static SharedPreferences.Editor mEditor = null;
        public static void init(Context context){
            if (null == mSharedPreferences) {
                mSharedPreferences = android.preference.PreferenceManager.getDefaultSharedPreferences(context) ;
            }
        }
      public static String getString(String key, String faillValue){
          return mSharedPreferences.getString(key, faillValue);
      }
      public static void commitString(String key, String value){
          mEditor = mSharedPreferences.edit();
          mEditor.putString(key, value);
          mEditor.commit();
      }
    }
}

3.新建MainActivity和Layout, 表现层:视图+事件处理
简单界面效果

MainActivity中的事件监听和处理代码如下:
public class MainActivity extends LanguageUtilsActivity implements View.OnClickListener{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById(R.id.btn_en).setOnClickListener(this);
            findViewById(R.id.btn_zh).setOnClickListener(this);

    }
    @Override
    public void onClick(View view) {
        Log.i("in", "onClick: 1564");
        switch (view.getId()){
            case R.id.btn_en:
                switchLanguage("en");
                break;
            case R.id.btn_zh:
                switchLanguage("ch");
                break;
        }
        //更新语言后,destroy当前页面,重新绘制
        finish();
        Intent it = new Intent(MainActivity.this, MainActivity.class);
        startActivity(it);
    }
}

总结:多语言操作类可以不用继承,单独作为一个工具类,在执行时需传入Context,避免getResource空指针
在这里插入图片描述
在这里插入图片描述
源码code:
两个类的代码都在上面了,除了界面和资源文件,就不贴了
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值