0

私のデバイスシステムは英語です。

AndroidManifest.xmlで、構成の変更を確認するアクティビティを定義しました。

<activity
   ...
   android:configChanges="locale" >

私のアクティビティでは、関数を追加します:

@Override
public void onConfigurationChanged(Configuration newConfig) {

      super.onConfigurationChanged(newConfig);



       Locale.setDefault(newConfig.locale);

       Log.v("*Locale is*", newConfig.locale.toString());

       getBaseContext().getResources().updateConfiguration(newConfig, getBaseContext().getResources().getDisplayMetrics());

}

私のアクティビティ onResume()では、上記の関数を呼び出しました。

@Override
public void onResume() {
    super.onResume();

     // I explicitely force my app to display in Finnish
     Configuration newConfig = new Configuration();
     newConfig.locale = new Locale("fi");
     onConfigurationChanged(newConfig);
}

(私のアクティビティはフラグメントをホストします。各画面ビューはフラグメントです。)

上記のコードを使用すると、起動時にアプリがフィンランド語で表示されると思います。Android4.1.1では正常に動作します。

しかし、 Android 2.3.3デバイスでアプリを実行すると、次のことが起こります。

シナリオ1:デスクトップからアプリを起動する==>アプリはフィンランド語で表示されています、問題ありません

シナリオ2:アプリにログインし、==>アプリを閉じます==>次に、デスクトップからアプリを再起動します==>アプリは英語で表示されます!! なぜ???

(ログメッセージ には常にLog.v("*Locale is*", newConfig.locale.toString());fi」と表示されます!)

シナリオ2では、アプリをデスクトップから再度起動すると、アプリに常にシステムのデフォルトのロケールが表示されることを確認しました。なんで?

シナリオ2で、アプリがシステムロケールの英語で表示されている理由がわかりません。

4

2 に答える 2

2

ロケールは次のように実用的に変更できます

public void setDefaultLocale(Context context, Locale locale) {
        Locale.setDefault(locale);
        Configuration appConfig = new Configuration();
        appConfig.locale = locale;
        context.getResources().updateConfiguration(appConfig,
                context.getResources().getDisplayMetrics());
        System.out.println("trad" + locale.getLanguage());
    } 

このメソッドを次のように呼び出します

setDefaultLocale(getBaseContext(), Locale.FRENCH);

setDefaultLocale(getBaseContext(), Locale.TRADITIONAL_CHINESE);

setDefaultLocale(getBaseContext(), Locale.ITALIAN);

変更する言語を選択し、変更を反映するために現在のアクティビティを開始します。

インテントインテント=newIntent(this、YourActivity.class); startActivity(intent);

こんにちはジョン、私はあなたのシナリオ2を克服するために私の側からテストしました、そしてロケールを実際的に変更してホーム画面に行きそして再び私のアプリケーションを起動した後、それはまだ私の変更された言語、すなわちイタリアにあります。

このリンクにコードを投稿しました

これを通過して、それがあなたのために働くことを私に知らせてください。

于 2013-03-11T11:38:11.150 に答える
0

Android 2.x のバグのようです

ロケールを変更するのではonCreate()なく、createMenu()一部の内部または内部で変更spinner.setOnItemSelectedListener()すると機能するためです。

これは回避策ですが、アプリの起動後に何らかのイベントを呼び出して、ロケールを変更してみてください。

于 2013-03-30T00:55:08.850 に答える