机器人:configChanges ="取向|屏幕尺寸"改变我的布局外观

时间:2016-07-12 07:47:06

标签: android landscape-portrait

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

我考虑在MainActivity

下添加我的清单
android:configChanges="orientation|keyboardHidden|screenSize"

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

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

2 个答案:

答案 0 :(得分:2)

有两个选项:

  1. 在您的活动或片段中使用onSaveInstanceState(Bundle outState)方法 - 保存您的数据并在轮换后恢复它们(onCreate(Bundle savedInstanceState)onRestoreInstanceState(Bundle savedInstanceState)
  2. 示例:

     @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,因为你已经用它来自己处理更改但是在轮换后扩展横向布局
    2. 示例:

      @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 guide中提出的选项。

答案 1 :(得分:0)

您可以简单地将屏幕方向设置为纵向到您的特定活动,因此无法旋转。 (如果您愿意) 像这样:

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