【问题标题】:Android - Scrolling without a ScrollBarAndroid - 没有滚动条的滚动
【发布时间】:2015-06-24 07:49:18
【问题描述】:

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

<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。

【问题讨论】:

  • 我正在考虑的一个方向:addHeaderView(View),我可以在其中添加项目 1,2.3。工具栏可以固定。

标签: android android-layout android-linearlayout android-xml android-relativelayout


【解决方案1】:

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()

【讨论】:

  • 完美!正是我所追求的,你举了一个非常清楚的例子!谢谢!
【解决方案2】:

在垂直滚动中使用垂直滚动总是很混乱,可能不起作用,但你可以检查LINK

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

【讨论】:

    【解决方案3】:

    我认为使布局可滚动的唯一方法是将所有内容放入 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>
    

    【讨论】:

    • ListView 不能在 ScrollView 内。
    • 如果您在代码中复制 setListViewHeightBasedOnChildren(lv) 方法,您可以在滚动视图中使用 listView,这样您就可以扩展 listView。另一种可能的解决方案是简化您的布局并将您想要滚动的布局也放在 listVeiw 中作为页眉或页脚
    猜你喜欢
    • 2018-11-17
    • 1970-01-01
    • 2013-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-22
    • 2011-08-14
    相关资源
    最近更新 更多