Android ScrollView会自动滚动到视图底部

27
我创建了一个包含地图、图片和另一个文本视图的活动,并为其添加了“scrollview”标签。但是,活动开始后它会自动滚动到页面底部。请告诉我这是为什么以及如何阻止它从移动到末尾,以便我可以手动滚动它。
<?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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:orientation="vertical"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.radikallab.earch.DetailsActivity"
android:background="@drawable/background10">


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


    <TextView
        android:id="@+id/title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="25dp"
        android:text="Title"
        android:textStyle="italic"/>

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:src="@drawable/background4"
        android:id="@+id/iv"/>


    <TextView
        android:id="@+id/rat"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="20sp"
        android:text="Title"
        android:textStyle="italic"/>

    <TextView
        android:id="@+id/addr"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="17sp"
        android:text="Title"
        android:textStyle="italic"/>

    <WebView

        android:layout_width="match_parent"
        android:layout_height="500dp"
        android:layout_marginTop="10dp"
        android:id="@+id/webView"
        android:layout_gravity="center_horizontal" />
</LinearLayout>

6个回答

71

我曾经面临同样的情况,但是将descendantFocusability属性添加到ScrollView的包含LinearLayout中,解决了我的问题。

android:descendantFocusability="blocksDescendants"

你可以将此用作:

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

有没有其他方法可以阻止任何类型的自动滚动而不禁用焦点?我在LinearLayout中使用具有选择功能的TextView。使用此方法会禁用文本选择。 - Damn Vegetables

12
在您的线性布局中设置android:focusableInTouchMode="true"
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:focusableInTouchMode="true"
android:layout_height="match_parent">

4
我从 Punit Sharma 和 FAЯAƸ 的答案中得到启示,我的问题是在一个可滚动的 view(RecyclerView)内部有另一个可滚动的 view(NestedScrollView),就像你的 ScrollView 内部有 WebView 一样。将我的内部可滚动视图放入具有属性 android:descendantFocusability="blocksDescendants" 的 FragmentLayout 中解决了我的自动向底部滚动的问题。
<androidx.core.widget.NestedScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        ....

        <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:descendantFocusability="blocksDescendants"
            ...>
            <androidx.recyclerview.widget.RecyclerView
                android:id="@+id/image_gridview"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"/>
       </FrameLayout>

    </androidx.constraintlayout.widget.ConstraintLayout>
</androidx.core.widget.NestedScrollView>

3

如果您想使用Java手动设置此项,请尝试以下方法: FOCUS_UP用于向上滚动到顶部,FOCUS_DOWN用于将其滚动到底部。

scrollView.post(new Runnable() {
                        public void run() {
                            scrollView.fullScroll(View.FOCUS_UP);
                        }

1
实际上,我找到了一个简单的答案,只需在相关的Java文件中添加“setfocusable(false)”即可......在这种情况下,“webview”首先滚动,因此在相关的Webview Java类中添加“webview.setfocusable(false)”。

0
实际上,如果ScrollView中的子元素也支持滚动,比如ListView和在你的情况下的WebView,我们会遇到滚动问题。
我找到了一个类似的问题,并提供了一些解决方法。它支持垂直滚动,但是如果HTML页面超出了WebView的宽度,则不支持水平滚动。
参见this了解更多信息。

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