android:configChanges=";方向“屏幕大小”;更改我的布局外观

android:configChanges=";方向“屏幕大小”;更改我的布局外观,android,landscape-portrait,Android,Landscape Portrait,我有一个适配器类和一个main活动。Adapter类显示孩子们的名字列表,在名字旁边,它显示孩子们到达学校的时间。问题是当我旋转到横向时,时间值丢失 我考虑在MainActivity android:configChanges="orientation|keyboardHidden|screenSize" 在横向模式下,时间值不会丢失,但布局的外观与纵向模式的外观相同。在现实中,横向布局看起来有点不同于纵向布局 在这种情况下,为了获得时间值并保持景观布局的外观,我该怎么做。有两个选项: 在活动

我有一个
适配器
类和一个
main活动
Adapter
类显示孩子们的名字列表,在名字旁边,它显示孩子们到达学校的时间。问题是当我旋转到横向时,
时间
值丢失

我考虑在
MainActivity

android:configChanges="orientation|keyboardHidden|screenSize"
在横向模式下,时间值不会丢失,但布局的外观与纵向模式的外观相同。在现实中,横向布局看起来有点不同于纵向布局

在这种情况下,为了获得
时间
值并保持景观布局的外观,我该怎么做。

有两个选项:

  • 在活动或片段中使用
    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");
            }
    
            ...
        }
    
    @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:configChanges,就像您自己处理更改一样,但在旋转后会膨胀横向布局
  • 例如:

     @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");
            }
    
            ...
        }
    
    @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();
        }
    }
    
    我更喜欢第一个选项,也是在中提出的。

    有两个选项:

  • 在活动或片段中使用
    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");
            }
    
            ...
        }
    
    @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:configChanges,就像您自己处理更改一样,但在旋转后会膨胀横向布局
  • 例如:

     @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");
            }
    
            ...
        }
    
    @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();
        }
    }
    

    我更喜欢第一个选项,这也是在中提出的。

    您可以简单地将屏幕方向设置为纵向,以适合您的特定活动,因此它不能旋转(如果需要) 这样说:

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

    您可以简单地将屏幕方向设置为与特定活动垂直,使其无法旋转(如果需要) 这样说:

     <activity android:name=".MainActivity"
                android:screenOrientation="portrait">
      </activity>
    
    
    
    Thankyu:)如果我使用您的第二个解决方案,在if case下的onConfigurationChanged()中,我需要为适配器类设置布局区域xml。我该怎么做?在配置更改后,您可以检查与布局膨胀相关的堆栈溢出。还有一些关于StackOverflow的问题与布局膨胀有关,因此您可以检查这些问题,并使用更适合您的解决方案。谢谢:)如果我使用您的第二个解决方案,在OnConfiguration Changed()中的if case下,我需要为适配器类设置布局区域xml。我该怎么做?在配置更改后,您可以检查与布局膨胀相关的堆栈溢出。还有一些关于StackOverflow的问题与布局膨胀有关,因此您可以检查它们,并使用更适合您的方法。