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,让语言及时生效。

    private void restart() {
            Intent it = new Intent(getActivity(), MainActivity.class); //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自己,然后重启自己。

     @Override
        protected void onNewIntent(Intent intent) {
            if (intent.getAction() == null) {
                finish();
                Intent i = new Intent(this, MainActivity.class);
                startActivity(i);
                // overridePendingTransition(0, 0);
            } else {
                //其他逻辑
            }
        }

    结束语:

    APP语言设置不复杂,主要是如何将语言设置及时生效,涉及activity重启,广播等。

  • 相关阅读:
    HTTP协议中常用相应的状态码总结
    mysql 用户管理
    史上最全的mysql聚合函数总结(与分组一起使用)
    jQuery+masonry实现瀑布流
    MySQL Workbench 导入导出乱码解决方法
    在Google Maps 上点击标签显示说明并保持不消失
    在Google Maps 上点击标签后显示说明
    如何在Google Maps 添加多个标记
    如何在 Google 地图中添加标记和说明
    Google Maps API3 之 Hello World
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/5395303.html
Copyright © 2011-2022 走看看