在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); }}
跃然一笑
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);
添加回答
举报
0/150
提交
取消