2

言語を変更するための3つのボタンがあります。そのため、ボタンを押すたびに言語を変更できるボタンにリスナーを設定できるメソッドを作成する必要があります。私はこれをhttps://stackoverflow.com/a/2900144/1088229で試しましたが、この方法ではロケールが1回だけ変更され、これ以上機能しないようです(もう一度クリックしても応答しません)。リスナーの最後に追加changeLanguageListener()したので、リスナーが更新されます。

それで、それは大丈夫ですか、私はそれをどのように解決しましたか、それとも別の方法がありますか?

private void changeLanguageListener() {
    final Button butEn = (Button) findViewById(R.id.button_language_en);
    final Button butLt = (Button) findViewById(R.id.button_language_lt);
    final Button butRu = (Button) findViewById(R.id.button_language_ru);
    OnClickListener listener = new OnClickListener() {

        public void onClick(View v) {
            Button but = (Button) v;
            Resources res = getResources();
            String current = res.getConfiguration().locale.getCountry();
            Log.i("Current", current);
            String localeString = new String(current);
            if (but.equals(butEn)) {
                localeString = "en";
            } else if (but.equals(butLt)) {
                localeString = "lt";
            } else if (but.equals(butRu)) {
                localeString = "ru";
            }
            Log.i("Clicked", localeString);

            if (!current.equalsIgnoreCase(localeString) && localeString.length() > 0) {
                // Change locale settings in the app.
                DisplayMetrics dm = res.getDisplayMetrics();
                android.content.res.Configuration conf = res.getConfiguration();
                conf.locale = new Locale(localeString.toLowerCase());
                res.updateConfiguration(conf, dm);  
                //refresh menu
                setGridView();
                //added this line to get refreshed listener
                changeLanguageListener();
            }               
        }
    };
    butEn.setOnClickListener(listener);
    butLt.setOnClickListener(listener);
    butRu.setOnClickListener(listener);
}
4

3 に答える 3

2

したがって、ロケールを変更できるアクティビティは2つ(2つのメニューモード)しかないため、ロケールを変更した直後にActivityを再起動するだけで、すべてが更新されます。他のより良い解決策は見つかりませんでした

于 2012-06-20T08:03:09.593 に答える
2
Resources res = context.getResources();
// Change locale settings in the app.

DisplayMetrics dm = res.getDisplayMetrics();

android.content.res.Configuration conf = res.getConfiguration();

conf.locale = new Locale(language_code.toLowerCase());
res.updateConfiguration(conf, dm);

言語固有のコンテンツがある場合は、設定に基づいて変更できます。##見出し##

于 2013-09-11T05:28:48.950 に答える
1

アプリケーション内で言語を変更することはお勧めしません。より良い解決策は、システムのロケール設定を開くボタンです。これには、次のインテントを使用できます。

startActivityForResult(new Intent(android.provider.Settings.ACTION_LOCALE, 0);

ロケール設定の詳細については、http: //developer.android.com/reference/android/provider/Settings.html#ACTION_LOCALE_SETTINGSをご覧ください。

于 2012-05-23T08:20:42.453 に答える