我有两项活动:main activity
和settings activity
我的layout
有两个main activity
,English
有一个,Farsi
有一个,这两个布局完全不同。我将这两个布局放在名为layout
和layout_fa
的两个子文件夹中。当我在设置活动中更改语言时,主活动中的所有strings
都会更改,但布局不会更改,直到我重新启动应用程序。
如何可以更改主要活动的布局?
注意:我可以使用fragments
进行操作,但我正在寻找其他方法。
答案 0 :(得分:1)
首选项更改后,您需要手动重新创建活动。
将偏好设置保存在MainActivity
' onCreate
。
private boolean mEnglishLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
mEnglishLayout = prefs.getBoolean("ENGLISH_LAYOUT", true);
...
}
当您从SettingsActivity返回时,您的MainActivity会调用onRestart
您可以观察更改的位置:
@Override
protected void onRestart() {
super.onRestart();
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
boolean newLayout = prefs.getBoolean("ENGLISH_LAYOUT", true);
if (mEnglishLayout != newLayout) {
new Handler().post(new Runnable() {
@Override
public void run() {
recreate();
}
});
}
}
注意:如果您只需要设置不同的活动布局,则可以使用setContentView(R.layout.some_layout)
代替recreate()
。
答案 1 :(得分:0)
检查您的语言区域并使用setContentView
类onResume()
方法中的main activity