Android - 没有 ScrollBar 的滚动

Android - Scrolling without a ScrollBar

我有以下布局(为简洁起见,我删除了不同的属性):

<RelativeLayout>
    <LinearLayout>
        <android.support.v7.widget.Toolbar/>
        <LinearLayout android:id="@+id/item1"/>
        <LinearLayout android:id="@+id/item2"/>
        <LinearLayout android:id="@+id/item3"/>
        <ListView/>
    </LinearLayout>
    <android.support.design.widget.FloatingActionButton/>
</RelativeLayout>

我正在尝试让整个页面都可以滚动。目前,只有 ListView 滚动。知道怎么做吗?请注意,由于我嵌入了 ListView,因此我无法使用 ScrollView。此外,外部元素必须是 RelativeLayout,因为无论滚动如何,我都需要固定 FloatingActionButton。

我认为使布局可滚动的唯一方法是将所有内容放入 ScrollView 例如这样:

<RelativeLayout>
    <ScrollView android:layout_width="match_parent"
        android:layout_height="match_parent">
        <LinearLayout>
            <android.support.v7.widget.Toolbar/>
            <LinearLayout android:id="@+id/item1"/>
            <LinearLayout android:id="@+id/item2"/>
            <LinearLayout android:id="@+id/item3"/>
            <ListView/>
        </LinearLayout>
        <android.support.design.widget.FloatingActionButton/>
    </ScrollView>
</RelativeLayout>

在垂直滚动条内使用垂直滚动条总是很麻烦,可能根本行不通,但你可以检查一下LINK

你也可以使用 listView.requestDisallowInterceptTouchEvent(false).

ScrollView 中包含 ListView 会给你带来很多麻烦。而是只在布局

中保留 ListView
<RelativeLayout>
    <LinearLayout>
        <android.support.v7.widget.Toolbar/>
        <ListView/>
    </LinearLayout>
    <android.support.design.widget.FloatingActionButton/>
</RelativeLayout>

并将您的 LinearLayouts 移动到单独的文件中(例如 header.xml

<LinearLayout>
    <LinearLayout android:id="@+id/item1"/>
    <LinearLayout android:id="@+id/item2"/>
    <LinearLayout android:id="@+id/item3"/>
</LinearLayout>

然后您可以使用

将布局作为页眉添加到您的 ListView
ListView listView = (ListView) findViewById(R.id.list);
View header = LayoutInflater.from(context).inflate(R.layout.header, listView, false);
listView.addHeaderView(header); // call before you set adapter!

现在整个视图都可以滚动了。如果您使用 onItemClickListener,请不要忘记索引会移动 listView.getHeaderViewsCount()