10

言語を動的に変更したいのですが、onConfigurationChanged を使用しようとしていますが、呼び出されていません。アクション バーとビューページャーを作成する MainActivity があります。私の残りのページはフラグメントです。私の SettingsFragment には、言語をフランス語に切り替えるボタンがあります。

langChange.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View vi) {
            MainActivity main = (MainActivity)getActivity();
            main.langChange();
        }

});

それから私の MainActivity で私は持っています

@Override
public void onConfigurationChanged(Configuration newConfig){
    super.onConfigurationChanged(newConfig);
    if (locale != null){
        newConfig.locale = locale;
        Locale.setDefault(locale);
        getBaseContext().getResources().updateConfiguration(newConfig, getBaseContext().getResources().getDisplayMetrics());
    }
}

public void langChange(){
    if(currentLanguage == FRENCH_LANGUAGE){
        locale = new Locale("en");
        Locale.setDefault(locale);
        Configuration c = getBaseContext().getResources().getConfiguration();
        c.locale = locale;
        getBaseContext().getResources().updateConfiguration(c,getBaseContext().getResources().getDisplayMetrics());
        currentLanguage = "English";
    }
    else if(currentLanguage == ENGLISH_LANGUAGE){
        locale = new Locale("fr");
        Locale.setDefault(locale);
        Configuration c = getBaseContext().getResources().getConfiguration();
        c.locale = locale;
        getBaseContext().getResources().updateConfiguration(c,getBaseContext().getResources().getDisplayMetrics());
        currentLanguage = "French";
    }
    actionBar.setSelectedNavigationItem(actionBar.getTabCount() - 1); //This just puts it back to the settings tab
}

onConfigurationChanged呼び出されていません。私のマニフェストには次のものがあります。

<activity android:name="MainActivity" android:screenOrientation="portrait" android:configChanges="locale"></activity>

これらのオプションの 1 つまたはすべてを追加しようとしorientation|keyboardHidden|screenSizeましたが、成功しませんでした。

このすべての理由は、ボタンをクリックしたら actionBar テキストと他のすべてのテキストを変更したいからです。フランス語用に別の文字列ファイルがあります。

どんな助けでも素晴らしいでしょう。

4

2 に答える 2

16

onConfigurationChanged() を呼び出すには、android:configChanges="layoutDirection|locale" を定義する必要があります。

于 2014-12-25T15:51:47.520 に答える