更改 activity 的布局

change the layout of activity

我有两个活动:main activitysettings activity
我的 main activity 有两个 layoutEnglish 有一个,Farsi 有一个,这两种布局完全不同。我将这两个布局放在名为 layoutlayout_fa 的两个子文件夹中。当我在设置 activity 中更改语言时,主要 activity 中的所有 strings 都发生了变化,但在我重新启动应用程序之前布局不会改变。

当我从设置 activity 返回时,如何 更改主要 activity 的布局?

注意 :我可能可以用 fragments 做到这一点,但我正在寻找另一种方法。

首选项更改后,您需要手动重新创建活动。

  1. 将首选项保存在 MainActivityonCreate 中。

    private boolean mEnglishLayout;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
        mEnglishLayout = prefs.getBoolean("ENGLISH_LAYOUT", true);
        ...
    }
    
  2. 当您从 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