是否可以在使用Android资源的同时以编程方式更改应用程序的语言?
如果没有,是否可以请求特定语言的资源?
我想让用户从应用程序更改应用程序的语言.
我的用户可以更改应用内的区域设置(他们可能希望将手机设置保留为英文,但可以用法语,荷兰语或任何其他语言阅读我的应用内容...)
为什么这个在1.5/1.6中完全正常但在2.0中不再是???
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()) {
case 201:
Locale locale2 = new Locale("fr");
Locale.setDefault(locale2);
Configuration config2 = new Configuration();
config2.locale = locale2;
getBaseContext().getResources().updateConfiguration(
config2, getBaseContext().getResources().getDisplayMetrics());
// loading data ...
refresh();
// refresh the tabs and their content
refresh_Tab ();
break;
case 201: etc...
Run Code Online (Sandbox Code Playgroud)
问题是,每当用户通过以上代码行时,MENU"缩小"越来越多......
这是缩小的菜单:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(0, 100, 1, "REFRESH").setIcon(android.R.drawable.ic_menu_compass);
SubMenu langMenu = menu.addSubMenu(0, 200, 2, "NL-FR").setIcon(android.R.drawable.ic_menu_rotate);
langMenu.add(1, 201, 0, "Nederlands");
langMenu.add(1, 202, 0, "Français");
menu.add(0, 250, 4, R.string.OptionMenu2).setIcon(android.R.drawable.ic_menu_send);
menu.add(0, 300, …Run Code Online (Sandbox Code Playgroud) 我希望我的应用程序支持三种语言西班牙语,葡萄牙语和英语.并选择在app中选择语言.我已经做了
1)3个可绘制的文件夹drawable-es,drawable-pt,drawable.
2)3个值文件夹值-es,values-pt,values.根据语言更改String.xml值.
我有imageView来选择语言.当点击它打开菜单包括选项英语,西班牙语,葡萄牙语.
我通过此代码在选项选择中在应用程序内设置Locale
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.en:
Locale locale = new Locale("en");
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
Toast.makeText(this, "Locale in English !", Toast.LENGTH_LONG).show();
break;
case R.id.pt:
Locale locale2 = new Locale("pt");
Locale.setDefault(locale2);
Configuration config2 = new Configuration();
config2.locale = locale2;
getBaseContext().getResources().updateConfiguration(config2, getBaseContext().getResources().getDisplayMetrics());
Toast.makeText(this, "Locale in Portugal !", Toast.LENGTH_LONG).show();
break;
case R.id.es:
Locale locale3 = new Locale("es");
Locale.setDefault(locale3);
Configuration config3 = new Configuration();
config3.locale = locale3;
getBaseContext().getResources().updateConfiguration(config3, …Run Code Online (Sandbox Code Playgroud) 我的应用程序用户可以从应用程序的设置更改语言.是否可以更改应用程序内的语言而不影响一般语言设置? stackoverflow的这个问题对我来说非常有用,我已经尝试过了.更改语言后,新创建的活动将显示更改的新语言,但当前活动和以前创建的处于暂停状态的活动不会更新.如何更新活动?我也花了很多时间试图让偏好改变立即应用但没有成功.重新启动应用程序时,会再次创建所有活动,因此语言已正确更改.
android:configChanges="locale"
Run Code Online (Sandbox Code Playgroud)
还在所有活动的清单中添加.并且还支持所有屏幕.目前我还没有在activity的onResume()方法中做过任何事情.有没有办法刷新或更新活动(没有完成并重新开始)?我在onResume()方法中遗漏了一些事情吗?
我用ActionBar和2个标签创建了非常基本的Android应用程序.它运作正常.然后我添加了locale资源目录,res/values-de并在里面添加了strings.xml用德语翻译的字符串.我将Nexus7上的语言更改为德语,部署后无法启动应用程序.我在模拟器上遇到了同样的问题.
请问我可以帮助我在移动设备上使用一些非默认语言环境运行此应用程序吗?在我的情况下德国......
报告以下错误.
02-07 15:32:41.314: W/dalvikvm(16682): threadid=1: thread exiting with uncaught exception (group=0x40d82930)
02-07 15:32:41.324: E/AndroidRuntime(16682): FATAL EXCEPTION: main
02-07 15:32:41.324: E/AndroidRuntime(16682): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.tabactionbar/com.example.tabactionbar.MainActivity}: java.lang.NullPointerException
02-07 15:32:41.324: E/AndroidRuntime(16682): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
02-07 15:32:41.324: E/AndroidRuntime(16682): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
02-07 15:32:41.324: E/AndroidRuntime(16682): at android.app.ActivityThread.access$600(ActivityThread.java:141)
02-07 15:32:41.324: E/AndroidRuntime(16682): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
02-07 15:32:41.324: E/AndroidRuntime(16682): at android.os.Handler.dispatchMessage(Handler.java:99)
02-07 15:32:41.324: E/AndroidRuntime(16682): at android.os.Looper.loop(Looper.java:137)
02-07 15:32:41.324: E/AndroidRuntime(16682): at android.app.ActivityThread.main(ActivityThread.java:5039)
02-07 15:32:41.324: E/AndroidRuntime(16682): at java.lang.reflect.Method.invokeNative(Native Method)
02-07 15:32:41.324: E/AndroidRuntime(16682): at java.lang.reflect.Method.invoke(Method.java:511)
02-07 …Run Code Online (Sandbox Code Playgroud)