当调整大小时,Android ScrollView 跳来跳去

5
我有一个ScrollView,它包含许多其他视图(TextViews、ImageViews等)。ScrollView比屏幕更高。我有一个AsyncTask,根据http响应更新ScrollView的子项。
我发现了一个有趣的行为,但不知道如何解决。如果我在AsyncTask.onPostExecute()中将任何子项的可见性设置为View.INVISIBLE,一切都正常。
然而,如果我将任何子项的可见性设置为View.GONE,则ScrollView在调用onPostExecute()时会跳到顶部。它跳的距离似乎有所不同。我猜重新布局ScrollView由于某种原因使其从顶部滚动。
因此问题是:是否有一种方法可以防止或解决这种行为?
PS. 使用ScrollView.jump(FOCUS_UP)作为解决方法并不理想,因为即使用户打算向下滚动,它也会强制将用户带到顶部。
编辑:实际上,我错了。问题不在于标记为gone的子视图,而是在于标记为gone的兄弟视图和ScrollView被重新调整大小。我的ScrollView位于一个LinearLayout内,该LinearLayout还包含一个按钮。当按钮设置为GONE时,ScrollView被调整大小以占用可用空间,导致它从顶部滚动。虽然原因不同,但仍在寻找解决方法。

如果View.INVISIBLE有效,为什么要将其更改为View.GONE?我猜测GONE实际上是折叠视图,触发了ScrollView的完全重绘,而INVISIBLE只是隐藏它,但我不能确定。 - mtmurdock
1
这些视图最好使用View.GONE,因为当视图不可见时,我不想要空白的空间。谢谢,Mike - emmby
@emmby,你能解决这个问题吗?我也遇到了类似的问题。 - Ritesh Kadmawala
很遗憾,RiteshKadmawala没有。 - emmby
1个回答

6
我遇到过同样的问题。如果要解决布局跳动的问题,请在顶级布局中加入以下内容:
android:descendantFocusability="blocksDescendants"

例子:

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:descendantFocusability="blocksDescendants" >

我知道我们不应该+1,但是谢谢!这个问题困扰了我很长时间! - Chris.Jenkins

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接