Android ScrollView 布局不适用于方向更改
Android ScrollView layout isn't working on orientation change
我正在尝试创建一个可以更改屏幕方向的应用程序。在屏幕方向更改时,我希望保存我的数据。我创建了名称相同但方向不同的布局。纵向布局是一个 RelativeLayout。横向布局有一个包含 RelativeLayout 的 ScrollView 布局,否则内容完全相同。
因为我使用的是 API13 和 +,所以我在我的清单中使用了这一行:
android:configChanges="keyboardHidden|orientation|screenSize"
当我改变方向时,我的数据仍然存在,但 ScrollView 不工作,所以我无法访问布局的底部。
如果没有 manifest.xml 文件中的前一行,ScrollView 可以完美运行(但不会保存数据)。我试图将我的 RelativeLayout 更改为 LinearLayout,因为它是 SrollView 中最常用的布局,但它不起作用。
你有解决这个问题的想法吗?
提前谢谢你
我找到了解决办法。我认为这不是最好的解决方案,我仍然不明白为什么我的问题中的代码不起作用。因此,如果您只知道 post 个评论或答案。
我的解决方案是:
1)我删除了清单中的行
2)我实现了这两种方法:
@Override
protected void onSaveInstanceState(Bundle outState) {
//data to be saved
super.onSaveInstanceState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
//retore data
}
此解决方案有效,因为我没有太多数据可以保存和恢复。这与其说是解决问题的方法,不如说是避免之前问题的方法。
此外,此方法可能会成为一个问题,例如,如果您有一个 ImageView 应该在开始时禁用,并在 activity 生命的剩余时间发生事件后启用。如果在onCreate()开始时使用setEnabled(false)方法,如果改变屏幕方向,即使之前发生了改变按钮状态的事件,setEnabled(false)方法也会再次发生。因此,您希望启用按钮,但在屏幕方向更改后它将被禁用。 (即使使用这个解决方案也很容易避免这个问题,但它不是一个干净的代码)。
我正在尝试创建一个可以更改屏幕方向的应用程序。在屏幕方向更改时,我希望保存我的数据。我创建了名称相同但方向不同的布局。纵向布局是一个 RelativeLayout。横向布局有一个包含 RelativeLayout 的 ScrollView 布局,否则内容完全相同。
因为我使用的是 API13 和 +,所以我在我的清单中使用了这一行:
android:configChanges="keyboardHidden|orientation|screenSize"
当我改变方向时,我的数据仍然存在,但 ScrollView 不工作,所以我无法访问布局的底部。
如果没有 manifest.xml 文件中的前一行,ScrollView 可以完美运行(但不会保存数据)。我试图将我的 RelativeLayout 更改为 LinearLayout,因为它是 SrollView 中最常用的布局,但它不起作用。
你有解决这个问题的想法吗?
提前谢谢你
我找到了解决办法。我认为这不是最好的解决方案,我仍然不明白为什么我的问题中的代码不起作用。因此,如果您只知道 post 个评论或答案。
我的解决方案是:
1)我删除了清单中的行
2)我实现了这两种方法:
@Override
protected void onSaveInstanceState(Bundle outState) {
//data to be saved
super.onSaveInstanceState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
//retore data
}
此解决方案有效,因为我没有太多数据可以保存和恢复。这与其说是解决问题的方法,不如说是避免之前问题的方法。
此外,此方法可能会成为一个问题,例如,如果您有一个 ImageView 应该在开始时禁用,并在 activity 生命的剩余时间发生事件后启用。如果在onCreate()开始时使用setEnabled(false)方法,如果改变屏幕方向,即使之前发生了改变按钮状态的事件,setEnabled(false)方法也会再次发生。因此,您希望启用按钮,但在屏幕方向更改后它将被禁用。 (即使使用这个解决方案也很容易避免这个问题,但它不是一个干净的代码)。