我需要什么:我想在应用程序中提供更改语言的选项,以便仅更改应用程序的语言,而不是整个电话语言。
我所做的:我试图在运行时更改语言环境,并且正在更改语言。
问题是什么:我想要的是,我不想在更改语言时重新创建“活动”或“片段”。
我尝试过的如下。
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>
如有需要,请问我。预先感谢。