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

你不是想重新发明轮子吗?

为什么不使用用户在手机上选择的默认语言环境?这是 Android 生态系统中的首选方式。

您唯一需要做的就是提供资源文件(例如 )的多个版本(每个所需的语言环境一个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 回答
1

问题在于你的流程你完成了你的活动,然后开始新的活动,所以这样做:

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