如何解决Android:使用android:configChanges =“ orientation | keyboardHidden”>
我正在开发我的第一个应用程序NBA测验。
在这里,我有一个带有问题的Textfield和四个水平排列的按钮。然后,我创建了一个横向模式,并将Buttons的结构更改为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"
代码,导致您的活动没有在方向更改时重新创建(这解决了状态丢失等问题),但是您失去了在方向上使用新布局(横向)的功能变化。当您在AndroidManifest中定义android:configChanges =“ keyboardHidden | orientation”时,您会告诉Android:“拔出键盘或旋转手机时,请不要执行默认重置;我想自己处理。 “
Android会破坏方向更改中的“活动”,以增加新的布局(如果有)。因此,更改后在横向模式下看到的是相同的布局(默认/纵向),而不是横向布局,这导致按钮水平显示而不是2X2。
不建议使用android:configChanges="orientation|keyboardHidden"
保存方位变化中的活动状态。相反,您应该使用onSavedInstanceState
捆绑包将方向更改应用到重新创建的活动中,以保留状态变化。
onSavedInstanceState的引用:https://developer.android.com/reference/android/app/Activity.html#onSaveInstanceState(android.os.Bundle)
实施:https://www.journaldev.com/22621/android-onsaveinstancestate-onrestoreinstancestate
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。