横向纵向 - android:configChanges="方向|屏幕大小" 更改我的布局外观



我有一个Adapter类和一个MainActivityAdapter类显示孩子的名字列表,在名字旁边,它显示他们到达学校time。问题是当我旋转到横向时,time值丢失了。

我考虑在MainActivity下添加我的清单

android:configChanges="orientation|keyboardHidden|screenSize"

发生的情况是,在横向模式下时间值不会丢失,但布局的外观看起来与纵向模式相同。实际上,横向布局看起来与纵向布局略有不同。

在这种情况下,我该怎么做才能获得time值并保持横向布局的外观。

有 2 个选项:

  1. 在活动或片段中使用onSaveInstanceState(Bundle outState)方法 - 保存数据并在旋转后恢复它们(以onCreate(Bundle savedInstanceState)onRestoreInstanceState(Bundle savedInstanceState)为单位)

例:

 @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putSerializable("time_data", (Seriazable) mTimeList);
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ...
        if (savedInstanceState != null) {
            // restore value of members from saved state
            mTimeList = savedInstanceState.getSerializable("time_data");
        }
        ...
    }
  1. 使用android:configChanges,因为您已经习惯自己处理更改,但在旋转后会膨胀横向布局

例:

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    // Checks the orientation of the screen
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
        Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
    }
}

我更喜欢第一个选项,也是Android指南中提出的。

您只需将屏幕方向设置为纵向到您的活动,这样它就不能旋转。(如果你愿意)像这样:

 <activity android:name=".MainActivity"
            android:screenOrientation="portrait">
  </activity>

最新更新