相关疑难解决方法(0)

在应用程序内更改区域设置

我的用户可以更改应用内的区域设置(他们可能希望将手机设置保留为英文,但可以用法语,荷兰语或任何其他语言阅读我的应用内容...)

为什么这个在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)

android locale menu

195
推荐指数
5
解决办法
15万
查看次数

onConfigurationchanged不会通过jellybean调用(4.2.1)

我真的很痛苦这个问题.我已经设置了旗帜android:configChanges="keyboardHidden|orientation|locale"

但是当我改变语言的配置时,onconfigurationchanged不会调用函数.奇怪的是,我的代码在其他Android平台上运行良好.

我在这里搜索了这个问题.有人说我需要将sdk版本设置得更低.但它没有用.

请给我一些提示.

android android-4.2-jelly-bean

7
推荐指数
2
解决办法
1万
查看次数

在Android 5.0中更改应用程序语言不起作用

我正在使用下面的代码在按钮点击时更改我的应用程序语言(例如从法语更改为英语),它在Android 4.0 +上工作正常但在5.0上却没有.

Locale localeEn = new Locale("en_US");
Locale.setDefault(localeEn);
Configuration configEn = new Configuration();
configEn.locale = localeEn;
getApplicationContext().getResources().updateConfiguration(configEn, null);
this.recreate();
Run Code Online (Sandbox Code Playgroud)

有什么线索为什么好吗?

编辑:这是我的清单(使用android:configChanges)

<activity
            android:name=".activities.LoginActivity"
            android:configChanges="orientation|locale"
            android:label="@string/app_name"
            android:screenOrientation="portrait"/>
Run Code Online (Sandbox Code Playgroud)

android locale android-context

6
推荐指数
1
解决办法
7475
查看次数

区域设置更改后不调用 OnConfigurationChanged

我想要做的是在应用程序中为用户提供简单的语言更改。当前视图的文本以及 Back Stack 应替换为所选语言的字符串。我刚刚编写了以下代码片段,它可以很好地完成他的工作:

private void setLocale(Locale locale) {
    Locale.setDefault(locale);
    Configuration config = new Configuration();
    config.locale = locale;
    getBaseContext().getResources().updateConfiguration(config,
            getBaseContext().getResources().getDisplayMetrics());
}
Run Code Online (Sandbox Code Playgroud)

经过一番研究,我发现,在更改语言环境配置后,每个活动都应该自动刷新自己 - 但在我的情况下不是这样。当前视图以及整个 Back Stack 仍然具有默认语言环境 - 它们只是在重新打开 Activity 后发生变化。

我已经将属性添加android:configChanges="locale|layoutDirection"到我的,AndroidManifest.xml所以不会成功。

大家有什么建议吗?或者我是否有错误的目的来解决这个问题?

编辑
好吧,似乎OnConfigurationChanged()只能通过在 android 设置中更改设备范围内的语言来触发?
更改应用程序中的语言后,是否还有其他方法可以刷新每个活动活动(当前和返回堆栈)?

java configuration android locale

6
推荐指数
1
解决办法
1976
查看次数

轮换后Android语言会发生变化

安装我的应用程序后,首次运行时会要求用户选择语言; 但是如果用户第二次启动应用程序,则会自动设置语言(以前选择的语言).

问题是,在用户选择语言的第一次运行时,app仍然是英文的(无论用户选择什么语言),但如果我旋转设备,则语言被更改为正确的(到选定的一个).应用程序第二次运行时出现同样的问 应用程序以英语启动,但在轮换语言更改为正确之后.

有什么建议?先感谢您

这里是我更改语言的MainActivity代码:

private void initApp() {
        if (Settings.getLanguage().equals("")){ 
            String[] items = { getResources().getString(R.string.lang_eng), getResources().getString(R.string.lang_geo)};
            showDialogSingleChoise(items, getResources().getString(R.string.select_language_title), 0, false, false, this.languageSelectedListener, this.languageConfirmedListener, null);
        } else {        
            System.out.println("initApp: " + Settings.getLanguage());

            Settings.setLanguage(MainActivity.this.getResources(), Settings.getLanguage());
            appVersionCheck();
        }
    }

private OnClickListener languageConfirmedListener = new OnClickListener() {

    @Override
    public void onClick(DialogInterface dialog, int which) {
        Settings.setLanguage(MainActivity.this.getResources(), MainActivity.this.language);
        appVersionCheck();
    }
};
Run Code Online (Sandbox Code Playgroud)

这里是来自设置的代码片段:

public static void setLanguage(Resources res, String langString){
        System.out.println("lang in pref: " + langString);
        setStringProperty(PREFS_LANG ,langString);
        MainApp.getInstance().setLocale(res);
    }
Run Code Online (Sandbox Code Playgroud)

这是我的Application类:

public class MainApp …
Run Code Online (Sandbox Code Playgroud)

android android-configchanges

5
推荐指数
1
解决办法
2754
查看次数

如何以编程方式更改语言?

我想以编程方式更改语言.

所以我构建了两个xml文件.

values-it
-->string.xml

values-en
-->string.xml
Run Code Online (Sandbox Code Playgroud)

这是MainActivity中用于更改整个应用程序语言的代码:

//意大利

Resources res = getApplicationContext().getResources();
DisplayMetrics dm = res.getDisplayMetrics();
android.content.res.Configuration conf = res.getConfiguration();
conf.locale = new Locale("it");
res.updateConfiguration(conf, dm);
Run Code Online (Sandbox Code Playgroud)

//英语

Resources res2 = getApplicationContext().getResources();
DisplayMetrics dm2 = res2.getDisplayMetrics();
android.content.res.Configuration conf2 = res2.getConfiguration();
conf2.locale = new Locale("en");
res2.updateConfiguration(conf2, dm2);
Run Code Online (Sandbox Code Playgroud)

现在,如果我设置英语(例如),代码执行时没有错误,但标签不会更改其文本.
如果我更改设备的方向,标签会正确更改其文本.

现在我如何修改我的代码以自动刷新标签?

android localization

5
推荐指数
2
解决办法
2万
查看次数