繁体   English   中英

Android:当我使用 android:configChanges=“orientation|keyboardHidden”> 时,横向模式的视图发生了变化

[英]Android: View of landscape mode changes when I use android:configChanges=“orientation|keyboardHidden”>

我正在开发我的第一个应用程序,一个 NBA 测验。

在这里,我有一个带有问题的文本字段和水平排列的四个按钮。 然后我创建了一个横向模式并将按钮的结构更改为 2x2(2 行,2 个按钮)。 起初我遇到了一些不同屏幕尺寸的问题,但用 android:layout_weight="1" 解决了它。

当横向模式看起来不错时,我遇到了另一个问题:每次切换到横向模式时,测验都会重新开始(新问题,分数再次为零)。 我在 Stackoverflow 上查找了这个问题,并找到了以下解决方案:

我将 AndroidManifest.xml 更改为

[...]
<activity android:name=".QuizActivity"
     android:configChanges="orientation|keyboardHidden">
</activity>
[...]

在 QuizActivity.java

@Override
    public void onConfigurationChanged(Configuration newConfig) {
        // TODO Auto-generated method stub
        super.onConfigurationChanged(newConfig);
    }

这解决了上述问题。 当我更改为横向模式时,活动会继续,而不会重新开始。 但是现在 2x2 结构不再起作用了。

这是没有上述代码的屏幕截图: landscape_mode_1

这是上面代码Landscape_mode_2的截图

有谁知道为什么上面的代码会改变横向模式的结构?

所以问题在于添加android:configChanges="orientation|keyboardHidden"代码你的活动没有在方向变化时重新创建(这解决了你丢失 state 等的问题)但是你失去了使用新布局(风景)的能力方向变化。 当您在 AndroidManifest 中定义 android:configChanges="keyboardHidden|orientation" 时,您是在告诉 Android:“请不要在拔出键盘或旋转手机时进行默认重置;我想自己处理。 "

Android 破坏方向更改中的 Activity 以膨胀新布局(如果有)。 因此,您在更改后在横向模式下看到的是相同的布局(默认/纵向),而不是横向的布局,这导致按钮水平显示而不是 2X2。

不建议使用android:configChanges="orientation|keyboardHidden"保存跨方向更改的活动 state。 相反,您应该使用onSavedInstanceState包来保留 state 跨方向更改,以将它们应用于重新创建的活动。

参考 onSavedInstanceState: https://developer.android.com/reference/android/app/Activity.html#onSaveInstanceState(android.os.Bundle)

实现: https://www.journaldev.com/22621/android-onsaveinstancestate-onrestoreinstancestate

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM