ScrollView系列:ScrollView自动滑动到底部的bug

Posted zhangjin1120

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ScrollView系列:ScrollView自动滑动到底部的bug相关的知识,希望对你有一定的参考价值。

  • 复现bug,把下面的代码复制,运行下,就会发现ScrollView自动滑动到底部了。把WebView换成RecyclerView也是一样的。
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

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


        <TextView
            android:id="@+id/title"
            android:layout_width="match_parent"
            android:layout_height="100dp"
            android:background="#ff0000"
            android:gravity="center_horizontal|bottom"
            android:text="tv1" />

        <TextView
            android:layout_width="match_parent"
            android:layout_height="100dp"
            android:background="#00ff00"
            android:gravity="center_horizontal|bottom"
            android:text="tv2" />

        <TextView
            android:layout_width="match_parent"
            android:layout_height="100dp"
            android:background="#0000ff"
            android:gravity="center_horizontal|bottom"
            android:text="tv3" />

        <WebView
            android:id="@+id/webView"
            android:layout_width="match_parent"
            android:layout_height="400dp"
            android:layout_gravity="center_horizontal"
            android:background="#ffff00" />
    </LinearLayout>
</ScrollView>

解决方案:

在ScrollView的直接子View中添加如下代码:

android:descendantFocusability="blocksDescendants"

完整代码如下:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"

    >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:descendantFocusability="blocksDescendants"
        android:orientation="vertical">
		...
    </LinearLayout>
</ScrollView>

以上是关于ScrollView系列:ScrollView自动滑动到底部的bug的主要内容,如果未能解决你的问题,请参考以下文章

Android零基础入门第61节:滚动视图ScrollView

求教如何让scrollview被选中部分自动移到中间

ScrollView中存在EditText,焦点变化引发自动滚动问题

启用自动布局时,在嵌入式 ScrollView 中未检测到滚动

浅谈android中的ListView合集系列之解决ScrollView和ListView嵌套冲突

如何在 ScrollView 中为 ImageView 设置自动布局约束?