更改 activity 的布局
change the layout of activity
我有两个活动:main activity
和 settings activity
。
我的 main activity
有两个 layout
,English
有一个,Farsi
有一个,这两种布局完全不同。我将这两个布局放在名为 layout
和 layout_fa
的两个子文件夹中。当我在设置 activity 中更改语言时,主要 activity 中的所有 strings
都发生了变化,但在我重新启动应用程序之前布局不会改变。
当我从设置 activity 返回时,如何 更改主要 activity 的布局?
注意 :我可能可以用 fragments
做到这一点,但我正在寻找另一种方法。
首选项更改后,您需要手动重新创建活动。
将首选项保存在 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 return 时,您的 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();
}
});
}
}
注意:如果您需要做的只是设置不同的activity布局,您可以使用setContentView(R.layout.some_layout)
代替recreate()
.
检查您的语言环境并在 main activity
class
的 onResume()
方法中使用 setContentView
我有两个活动:main activity
和 settings activity
。
我的 main activity
有两个 layout
,English
有一个,Farsi
有一个,这两种布局完全不同。我将这两个布局放在名为 layout
和 layout_fa
的两个子文件夹中。当我在设置 activity 中更改语言时,主要 activity 中的所有 strings
都发生了变化,但在我重新启动应用程序之前布局不会改变。
当我从设置 activity 返回时,如何 更改主要 activity 的布局?
注意 :我可能可以用 fragments
做到这一点,但我正在寻找另一种方法。
首选项更改后,您需要手动重新创建活动。
将首选项保存在
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 return 时,您的 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(); } }); } }
注意:如果您需要做的只是设置不同的activity布局,您可以使用setContentView(R.layout.some_layout)
代替recreate()
.
检查您的语言环境并在 main activity
class
onResume()
方法中使用 setContentView