微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在不重新创建活动的情况下更改Android App中的语言?

如何解决如何在不重新创建活动的情况下更改Android App中的语言?

不能在不重新创建活动的情况下更改语言环境
一个应用程序支持两种语言,当我更改语言时,我必须重新创建活动以显示期望的结果,但是我不想这样做。

private void setNewLocale(AppCompatActivity mContext,@LocaleManager.LocaleDef String language) {
        LocaleManager.setNewLocale(this,language);
        Intent intent = mContext.getIntent();
        startActivity(intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK));
    }

我也再次在“所有”文本字段上设置了文本,但这没有帮助!

当我参加应用程序的第三次活动时,如果我想返回第二个活动,则更改语言;如果我想在第二个活动和第一个活动中输入文本,那么我也必须重新创建那些我认为是不好的方法的活动去做吧。我只想更改语言,但不想重新创建活动!

单击按钮,我设置语言环境!

if(appPreference.getLanguage().equalsIgnoreCase("en")){
   setNewLocale(MainActivity.this,LocaleManager.araBIC);
}
else
    setNewLocale(MainActivity.this,LocaleManager.ENGLISH);

解决方法

首先在“活动”中定义这些功能

public void setLocale(String lang) {

        Locale myLocale = new Locale(lang);
        Resources res = getResources();
        DisplayMetrics dm = res.getDisplayMetrics();
        Configuration conf = res.getConfiguration();
        conf.locale = myLocale;
        res.updateConfiguration(conf,dm);
        Locale.setDefault(myLocale);
        onConfigurationChanged(conf);
    }

    private static void setLanguagePref(Context mContext,String localeKey) {
        AppPreference appPreference = new AppPreference(mContext);
        appPreference.setLanguage(localeKey);
    }

    public static String getLanguagePref(Context mContext) {
        AppPreference appPreference = new AppPreference(mContext);
        return appPreference.getLanguage();
    }

覆盖这些功能

@Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        //set Text Again of All layouts
        //Prefer to make a function and then set All Text

        super.onConfigurationChanged(newConfig);
    }

    @Override
    protected void onResume() {

        setLocale(getLanguagePref(getApplicationContext()));
        super.onResume();
    }

现在在任何事件(如Onclick)上设置语言

   setLocale("ar");
   setLanguagePref(MainActivity.this,"ar");

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?