1

私のAndroidアプリケーションは二言語です。したがって、2つのresフォルダー値とvalue-sw(スワヒリ語用)があります。設計時および実行時に、このファイルから文字列値をフェッチしています。例:レイアウト:

android:hint="@string/Officer"

およびコード内:

getResources().getString(R.string.Officer);

ロケール設定を変更するには、次のようなonCreate()で呼び出す関数があります。

public void ChangeLanguage(Context ctx,String Language){
        Resources res = ctx.getResources();
        DisplayMetrics dm = res.getDisplayMetrics();
        android.content.res.Configuration config = res.getConfiguration();
        config.locale = new Locale(Language.toLowerCase());
        res.updateConfiguration(config, dm);
}

すべて正常に動作します。向きを変えた場合にのみ問題が発生します。

たとえば、起動時に言語をスワヒリ語に設定しました。つまり、すべてがスワヒリ語にあります。ここで、向きを垂直から水平、またはその逆に変更するとします。レイアウトに設定されたテキストボックスボックスのヒントは、私が期待するスワヒリ語のままです。しかし、getResources()。getString(R.string.Officer); 英語のデフォルト値ファイルから値をフェッチします。

助言がありますか?

4

3 に答える 3

0

AndroidManifest.xmlandroid:configChanges="orientation"でアクティビティに設定します

そうすることで、方向が変更されたときにアクティビティが破棄されたり再作成されたりすることがなくなります。

于 2012-07-25T09:12:56.267 に答える
0

アプリで英語とスワヒリ語を使用して、質問と同じケースがあります。というvalues-sw名前のフォルダを作成し、そのフォルダに という名前のリソース ファイルを作成しましたstring.xml。これは私のすべてのスワヒリ語翻訳が書かれている場所です。onCreate で次のメソッドを呼び出します。

 public static void setLocale(Context context) {
    SharedPreferences sharedPreferences = context.getSharedPreferences(context.getPackageName(), Context.MODE_PRIVATE);
    String userLocale = sharedPreferences.getString("userlocale", null); // adapt to your need
    if (userLocale != null) {
        Locale locale = new Locale(userLocale);
        Locale.setDefault(locale);
        Configuration config = new Configuration();
        config.locale = locale;
        context.getResources().updateConfiguration(config, context.getResources().getDisplayMetrics());
    }
}

変更を有効にするために、アクティビティを更新することを忘れないでください。

finish();
startActivity(getIntent());

(私はこの答えがかなり遅いことを知っています。それが誰かの助けになることを願っています、乾杯!)

于 2015-12-23T23:12:25.330 に答える
0

属性を持つことの問題はandroid:configChanges、向きの変更後に onCreate() が呼び出されないようにすることです。あなたは基本的にアプリに次のように伝えています。

メソッドでその関数を呼び出すことをお勧めしますonConfigurationChanged()。その時点ですべてのビューが null になることに注意してください。そのため、それらが必要な場合は、新しい参照を取得する必要があります。

于 2012-07-25T09:19:10.630 に答える