zoukankan      html  css  js  c++  java
  • Android学习–Android app 语言切换功能

    功能:

    app用户根据自己的语言喜好,设置app语言。语言设置只针对本app,并在下次启动应用时保留前一次启动设置。

    更新语言:

    public static void changeAppLanguage(Resources resources, String lanAtr) {
            Configuration config = resources.getConfiguration();
            DisplayMetrics dm = resources.getDisplayMetrics();
            if (lanAtr.equals("ru_RU")) {
                config.locale = new Locale("ru", "RU");
            } else if (lanAtr.equals("en_US")) {
                config.locale = Locale.ENGLISH;
            } else if (lanAtr.equals("pt")) {
                config.locale = new Locale("pt");
            } else {
                config.locale = Locale.getDefault();
            }
            resources.updateConfiguration(config, dm);
        }
    sharePreferences存入设置语言:
    Sharences sharedPreferences = getActivity().getSharedPrefeivity().getPackageName(), 0);
    sharedPreferences.edit().putString("language", lanAtr).commit();

    语言更新后,对于之前出现且目前仍旧存活的activity,语言设置是不生效的。可以通过重启对应的activity,让语言及时生效。

    //MainActivity是你想要重启的activity it.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); it.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); getActivity().startActivity(it); }

    NOTE:

    • 一般,从用户体验角度讲,语言设置功能入口会放在App的前几层,如果入口太深,导致用户无法快速找到语言设置入口,并且如果要讲应用重启的话,用户行为操作记录会比较麻烦。
    • 重启对应Activity有几种方式:
      • 如果用户进入语言设置需要太多的层级,或者在操作语言设置之前操作的其他行为,APP想保存的,那可以通过广播的方式(sendBroadcast()),语言改变时发送广播,所有activity接受到广播后(BroadcastReceiver),都进行重启操作;
      • 如果允许用户设置语言后,app回到主目录,这样就简单很多,直接调用上面的restart()方法即可。

    重启singleTask activity:

    如果你的启动activity是singleTask,向上面那样重启,语言还是不生效的。这种情况如何呢?可以通过了解、利用其生命周期来解决,在切回singleTask属性的activity时,activity会调用onNewIntent()方法。 重写该方法就可以。以下是一种解决方法,先finish自己,然后重启自己。
    Intent i = new Intent(this, MainActivity.class); startActivity(i); // overridePendingTransition(0, 0); } else { //其他逻辑 } }

    结束语:

    APP语言设置不复杂,主要是如何将语言设置及时生效,涉及activity重启,广播等。
  • 相关阅读:
    BZOJ 3132: 上帝造题的七分钟 树状数组+差分
    PAT Advanced 1006 Sign In and Sign Out (25 分)
    PAT Advanced 1011 World Cup Betting (20 分)
    PAT Basic 1032 挖掘机技术哪家强 (20 分)
    PAT Basic 1028 人口普查 (20 分)
    PAT Basic 1004 成绩排名 (20 分)
    大数据数据库HBase(二)——搭建与JavaAPI
    PAT Advanced 1009 Product of Polynomials (25 分)(vector删除元素用的是erase)
    PAT Advanced 1002 A+B for Polynomials (25 分)(隐藏条件,多项式的系数不能为0)
    PAT Basic 1041 考试座位号 (15 分)
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/5399766.html
Copyright © 2011-2022 走看看