改变活动的布局

时间:2015-01-17 12:04:38

标签: android android-layout android-activity

我有两项活动:main activitysettings activity 我的layout有两个main activityEnglish有一个,Farsi有一个,这两个布局完全不同。我将这两个布局放在名为layoutlayout_fa的两个子文件夹中。当我在设置活动中更改语言时,主活动中的所有strings都会更改,但布局不会更改,直到我重新启动应用程序。

当我从设置活动回来时,

如何可以更改主要活动的布局?

注意:我可以使用fragments进行操作,但我正在寻找其他方法。

2 个答案:

答案 0 :(得分:1)

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

  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);
        ...
    }
    
  2. 当您从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();
                }
            });
        }
    }
    
  3. 注意:如果您只需要设置不同的活动布局,则可以使用setContentView(R.layout.some_layout)代替recreate()

答案 1 :(得分:0)

检查您的语言区域并使用setContentViewonResume()方法中的main activity