1

私のアプリケーションでは、ユーザーが自分の選択に応じて言語を変更できる設定を作成したいと思います。このために、言語ごとにそれぞれの値フォルダーと文字列ファイルを作成しました。また、私のコードスニペットは次のとおりです。

public class MultiLanguage extends Activity implements OnClickListener {

    private Button germany, english, french;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.language);

        english = (Button) findViewById(R.id.english);
        english.setOnClickListener(this);

        germany = (Button) findViewById(R.id.germany);
        germany.setOnClickListener(this);

        french = (Button) findViewById(R.id.french);
        french.setOnClickListener(this);

    }

    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.english:
            setLocale("en");
            break;

        case R.id.germany:
            setLocale("de");
            break;

        case R.id.french:
            setLocale("fr");
            break;
        }
    }
    public void setLocale(String localStr) {

        Locale localeLang = new Locale(localStr);
        Locale.setDefault(localeLang);
        Configuration config = new Configuration();
        config.locale = localeLang;
        getBaseContext().getResources().updateConfiguration(config,
                getBaseContext().getResources().getDisplayMetrics());
        finish();
        Intent refreshActivity = new Intent(this, Home.class);
        refreshActivity.setAction(Intent.ACTION_CONFIGURATION_CHANGED);
        startActivity(refreshActivity);
    }

}

しかし、アプリケーションから出てアプリを再起動するたびに、選択した言語が英語になりました。私はこの問題の根本を理解していません。

マニフェストファイルでは、次の行にも言及しています。

android:configChanges="locale"

私がここで犯した間違いをどんな体でも訂正できますか?

4

3 に答える 3

4

問題は、プログラムの起動の間に言語を保存しないことです。設定を使用して永続化し、onCreate.

于 2012-02-01T13:18:36.287 に答える
1

問題は、アクティビティを終了してから意図的に新しいアクティビティを開始するフローにあるため、次のようにします。

    Intent refreshActivity = new Intent(this, Home.class);
    refreshActivity.setAction(Intent.ACTION_CONFIGURATION_CHANGED);
    startActivity(refreshActivity);
    finish();
于 2012-02-01T13:33:17.883 に答える
1

車輪を再発明しようとしていませんか?

ユーザーが電話で選択したデフォルトのロケールを使用しないのはなぜですか? これは、Android エコシステムで推奨される方法です。

リソース ファイルの複数のバージョン (目的のロケールごとに 1 つ) を提供するだけです (例: values/strings.xml)。アプリケーションのリソースにユーザーのロケールが見つからない場合、デフォルトでvalues/strings.xml. それ以外の場合は使用しますvalues-[locale]/strings.xml

詳細: http://developer.android.com/guide/topics/resources/localization.html

于 2012-02-01T13:23:02.363 に答える