【问题标题】:Android ScrollView layout isn't working on orientation changeAndroid ScrollView 布局不适用于方向更改
【发布时间】:2016-01-16 19:10:23
【问题描述】:

我正在尝试创建一个可以更改屏幕方向的应用程序。在屏幕方向更改时,我希望保存我的数据。我创建了名称相同但方向不同的布局。纵向布局是RelativeLayout。横向的有一个包含 RelativeLayout 的 ScrollView 布局,否则内容完全相同。
由于我使用的是 API13 和 +,我在清单中使用了这一行:

android:configChanges="keyboardHidden|orientation|screenSize"

当我更改方向时,我的数据仍然存在,但 ScrollView 无法正常工作,因此我无法访问布局的底部。

没有 manifest.xml 文件中的前一行,ScrollView 可以完美运行(但数据未保存)。我试图将我的 RelativeLayout 更改为 LinearLayout,因为它是 SrollView 中最常用的布局,但它不起作用。

你有解决这个问题的想法吗?
提前谢谢你

【问题讨论】:

  • 请检查我的回答here可能对你有帮助
  • 我不确定这是否是最佳解决方案。事实上,我的应用程序非常简单,由 1 个活动组成。我的理解(也许我错了)是片段用于复杂的应用程序。我认为在这里使用 Fragment 就像买一辆法拉利每天跑 1 英里。这只是我的印象。您认为有更适合的解决方案吗?如果可能的话,我想了解它为什么不起作用。
  • 您正在尝试两种不同的布局文件,分别用于普通布局土地布局(横向)?
  • 是的,我有 2 个布局文件(普通和横向)。布局横向文件有一个ScrollView,在这个ScrollView中,和普通文件的代码一样。

标签: android android-layout layout scrollview


【解决方案1】:

我找到了解决方案。我认为这不是最好的解决方案,我仍然不明白为什么我的问题中的代码不起作用。因此,如果您知道,只需发表评论或答案即可。

我的解决方案是:
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 应该在开始时禁用并在事件后在活动生命周期的剩余时间内启用。如果在onCreate()开头使用setEnabled(false)方法,如果改变屏幕方向,即使之前发生过改变按钮状态的事件,setEnabled(false)方法也会再次发生。因此,您希望启用按钮,但在屏幕方向更改后它将被禁用。 (即使有这个解决方案也很容易避免这个问题,但它不是一个干净的代码)。

【讨论】:

    猜你喜欢
    • 2023-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-03
    • 1970-01-01
    • 1970-01-01
    • 2012-06-29
    • 1970-01-01
    相关资源
    最近更新 更多