Android 当视图大小更改时,ScrollView向下滚动
我目前有一个带有线性布局的滚动视图。我正在动态地更改一些内容,例如动态地设置一个长文本段落,并添加动态布局(按钮等)。这会导致线性布局的高度发生变化,从而导致滚动视图向下滚动。在动态更新布局时,如何保持当前滚动位置Android 当视图大小更改时,ScrollView向下滚动,android,scrollview,Android,Scrollview,我目前有一个带有线性布局的滚动视图。我正在动态地更改一些内容,例如动态地设置一个长文本段落,并添加动态布局(按钮等)。这会导致线性布局的高度发生变化,从而导致滚动视图向下滚动。在动态更新布局时,如何保持当前滚动位置 <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_heigh
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical
android:gravity="center_horizontal"
>
<!-- Dynamic Content Here -->
</LinearLayout>
</ScrollView>
我建议的一个选择是将滚动位置保存在一个捆绑包中并恢复它
@Override
protected void onSaveInstanceState(Bundle outState) {
outState.putInt("xPos", scrollView.getScrollX());
outState.putInt("yPos", scrollView.getScrollY());
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
int scrollX = savedInstanceState.getInt("xPos"); // Default value 0
int scrollY = savedInstanceState.getInt("yPos");
scrollView.scrollTo(scrollX, scrollY);
}
我认为通过以下步骤,您可以做到:
- 创建从scrollview扩展的自定义滚动视图
- 定义用于启用和禁用滚动的布尔属性
- 检查onScollChanged方法上的布尔变量,如果为true,则返回false
- 在将动态视图添加到其容器之前,将布尔变量设置为true
- 添加“完成”时将其设置为false
我希望这些能帮助你试试这个?或者投票让我忘记。。。看看我是否在乎?我可以尝试存储位置,然后恢复,但这意味着我将不得不倾听每个视图的布局,这将变得非常混乱,特别是如果我们考虑用户触摸的话。如果没有其他选择,我会保存这个。我也遇到了同样的问题,我用mjp66@Leo发布的解决方案修复了它,mjp66的答案链接对我有效。在写这篇文章的时候,它是正确的答案,包括我的在内,有220张赞成票。我不确定这是否有效,因为在视图添加到布局后的一段时间调用computeScroll,这意味着我必须再次跟踪布局更改…您希望在加载活动并设置内容视图后动态添加视图吗?或者在将新视图添加到根视图后设置内容视图?我正在加载活动,获取一些数据,然后添加数据,并将动态视图添加到布局中。