【问题标题】:android:configChanges="orientation|screenSize" changes my layout lookandroid:configChanges="orientation|screenSize" 改变了我的布局外观
【发布时间】:2016-07-12 16:26:18
【问题描述】:

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

我考虑在 MainActivity 下添加我的 Manifest

android:configChanges="orientation|keyboardHidden|screenSize"

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

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

【问题讨论】:

    标签: android landscape-portrait


    【解决方案1】:

    有两种选择:

    1. 在 Activity 或 Fragment 中使用 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 guide 中提出的。

    【讨论】:

    • Thankyou :) 如果我使用你的第二个解决方案,在 onConfigurationChanged() 中,我需要为 Adapter 类设置 layout-land xml。我该怎么做
    • 您可以在配置更改后查看与布局膨胀相关的 StackOverflow answer。 StackOverflow 上还有一些与布局膨胀相关的问题,因此您可以检查它们并使用更适合您的目的。
    【解决方案2】:

    您可以简单地将屏幕方向设置为纵向以适应您的特定活动,使其无法旋转。 (如果需要) 像这样:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-14
      • 2011-12-10
      相关资源
      最近更新 更多