更改应用程序语言的运行时间而无需重新创建活动

时间:2018-06-25 09:26:26

标签: android android-activity localization

我需要什么:我想在应用程序中提供更改语言的选项,以便仅更改应用程序的语言,而不是整个电话语言。

我所做的:我试图在运行时更改语言环境,并且正在更改语言。

问题是什么:我想要的是,我不想在更改语言时重新创建“活动”或“片段”。

我尝试过的如下。

TestActivity.java

    public class TestActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_dashboard, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        String selectedLang = null;

        int id = item.getItemId();

        if (id == R.id.menu_lang_english) {
            selectedLang = "en";
            Toast.makeText(this, "English selected!", Toast.LENGTH_SHORT).show();
        } else if (id == R.id.menu_lang_kannada) {
            selectedLang = "fr";
            Toast.makeText(this, "French selected!", Toast.LENGTH_SHORT).show();
        }

        changeLang(this, selectedLang);

        return super.onOptionsItemSelected(item);
    }

    private void changeLang(Context context, String selectedLang) {
        Locale myLocale = new Locale(selectedLang);
        Locale.setDefault(myLocale);
        android.content.res.Configuration config = new android.content.res.Configuration();
        config.locale = myLocale;
        context.getResources().updateConfiguration(config, context.getResources().getDisplayMetrics());

        recreate();
    }
}

activity_test.xml

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical"
    tools:context=".mvp.view.activity.TestActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/test"
        android:textSize="20sp" />
</LinearLayout>

如有需要,请问我。预先感谢。

0 个答案:

没有答案