为了账号安全,请及时绑定邮箱和手机立即绑定

在Android中以编程方式更改应用语言

在Android中以编程方式更改应用语言

月关宝盒 2019-05-29 16:43:52
在Android中以编程方式更改应用语言是否可以在使用Android资源的同时以编程方式更改应用程序的语言?如果没有,是否可以请求特定语言的资源?我想让用户从应用程序更改应用程序的语言。
查看完整描述

3 回答

?
冉冉说

TA贡献1877条经验 获得超1个赞

这真的很有效:

fa =波斯语,en =英语

languageToLoad变量中输入您的语言代码:

import android.app.Activity;import android.content.res.Configuration;import android.os.Bundle;public class Main extends Activity {
  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    String languageToLoad  = "fa"; // your language
    Locale locale = new Locale(languageToLoad); 
    Locale.setDefault(locale);
    Configuration config = new Configuration();
    config.locale = locale;
    getBaseContext().getResources().updateConfiguration(config, 
      getBaseContext().getResources().getDisplayMetrics());
    this.setContentView(R.layout.main);
  }}


查看完整回答
反对 回复 2019-05-29
?
跃然一笑

TA贡献1826条经验 获得超6个赞

我一直在寻找一种以编程方式更改系统语言的方法。虽然我完全理解正常的应用程序永远不应该这样做,而是:

  • 用户应该(通过意图)指向系统设置以手动更改它

  • 应用程序应该自己处理它的本地化,就像Alex的答案中所描述的那样

有必要真正地改变系统的语言。

这是未记录的API,因此不应用于市场/最终用户应用程序!

无论如何,我找到了解决方案:

  Locale locale = new Locale(targetLocaleAsString);

  Class amnClass = Class.forName("android.app.ActivityManagerNative");
  Object amn = null;
  Configuration config = null;

  // amn = ActivityManagerNative.getDefault();
  Method methodGetDefault = amnClass.getMethod("getDefault");
  methodGetDefault.setAccessible(true);
  amn = methodGetDefault.invoke(amnClass);

  // config = amn.getConfiguration();
  Method methodGetConfiguration = amnClass.getMethod("getConfiguration");
  methodGetConfiguration.setAccessible(true);
  config = (Configuration) methodGetConfiguration.invoke(amn);

  // config.userSetLocale = true;
  Class configClass = config.getClass();
  Field f = configClass.getField("userSetLocale");
  f.setBoolean(config, true);

  // set the locale to the new value
  config.locale = locale;

  // amn.updateConfiguration(config);
  Method methodUpdateConfiguration = amnClass.getMethod("updateConfiguration", Configuration.class);
  methodUpdateConfiguration.setAccessible(true);
  methodUpdateConfiguration.invoke(amn, config);


查看完整回答
反对 回复 2019-05-29
  • 3 回答
  • 0 关注
  • 630 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信