更改应用程序内部的区域设置

更改应用程序内部的区域设置

我的用户可以在应用程序中更改区域设置(他们可能希望保持他们的电话设置的英语,但阅读我的应用程序的内容法语,荷兰语或任何其他语言.)

为什么这个在1.5/1.6中工作得很好,但在2.0中就不再正常了?

@Overridepublic 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...

问题是,每当用户通过上面的代码行时,菜单“收缩”的次数就会越来越多.

这是缩小的菜单:

@Overridepublic 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, 5, R.string.OptionMenu3).setIcon(android.R.drawable.ic_menu_preferences);
    menu.add(0, 350, 3, R.string.OptionMenu4).setIcon(android.R.drawable.ic_menu_more);
    menu.add(0, 400, 6, "Exit").setIcon(android.R.drawable.ic_menu_delete);

    return super.onCreateOptionsMenu(menu);}

在API级别5中,我应该做些什么才能使它再次工作呢?

这就是我发现的:

<uses-sdk android:minSdkVersion="5" />

它运转得很好.。

<uses-sdk android:minSdkVersion="3" />

>每次更改地区时,菜单都会缩小!

由于我想让用户在1.5上访问我的应用程序,我应该做什么?


慕田峪4524236
浏览 483回答 3
3回答

梦里花落0921

在AndroidM中,最好的解决方案是行不通的。我编写了一个助手类来修复您应该从应用程序类和所有活动中调用的内容(我建议创建一个BaseActivity,然后使所有的活动继承它)。注这也将支持正确的RTL布局方向。帮助者班:public&nbsp;class&nbsp;LocaleUtils&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;Locale&nbsp;sLocale; &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;setLocale(Locale&nbsp;locale)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sLocale&nbsp;=&nbsp;locale; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(sLocale&nbsp;!=&nbsp;null)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Locale.setDefault(sLocale); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;updateConfig(ContextThemeWrapper&nbsp;wrapper)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(sLocale&nbsp;!=&nbsp;null&nbsp;&&&nbsp;Build.VERSION.SDK_INT&nbsp;>=&nbsp;Build.VERSION_CODES.JELLY_BEAN_MR1)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configuration&nbsp;configuration&nbsp;=&nbsp;new&nbsp;Configuration(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;configuration.setLocale(sLocale); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wrapper.applyOverrideConfiguration(configuration); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;updateConfig(Application&nbsp;app,&nbsp;Configuration&nbsp;configuration)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(sLocale&nbsp;!=&nbsp;null&nbsp;&&&nbsp;Build.VERSION.SDK_INT&nbsp;<&nbsp;Build.VERSION_CODES.JELLY_BEAN_MR1)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Wrapping&nbsp;the&nbsp;configuration&nbsp;to&nbsp;avoid&nbsp;Activity&nbsp;endless&nbsp;loop &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configuration&nbsp;config&nbsp;=&nbsp;new&nbsp;Configuration(configuration); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;We&nbsp;must&nbsp;use&nbsp;the&nbsp;now-deprecated&nbsp;config.locale&nbsp;and&nbsp;res.updateConfiguration&nbsp;here, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;because&nbsp;the&nbsp;replacements&nbsp;aren't&nbsp;available&nbsp;till&nbsp;API&nbsp;level&nbsp;24&nbsp;and&nbsp;17&nbsp;respectively. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;config.locale&nbsp;=&nbsp;sLocale; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Resources&nbsp;res&nbsp;=&nbsp;app.getBaseContext().getResources(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;res.updateConfiguration(config,&nbsp;res.getDisplayMetrics()); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;}}申请:public&nbsp;class&nbsp;App&nbsp;extends&nbsp;Application&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;onCreate(){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;super.onCreate(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LocaleUtils.setLocale(new&nbsp;Locale("iw")); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LocaleUtils.updateConfig(this,&nbsp;getBaseContext().getResources().getConfiguration()); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;@Override &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;onConfigurationChanged(Configuration&nbsp;newConfig)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;super.onConfigurationChanged(newConfig); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LocaleUtils.updateConfig(this,&nbsp;newConfig); &nbsp;&nbsp;&nbsp;&nbsp;}}基本活动:public&nbsp;class&nbsp;BaseActivity&nbsp;extends&nbsp;Activity&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;BaseActivity()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LocaleUtils.updateConfig(this); &nbsp;&nbsp;&nbsp;&nbsp;}}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Android