Android-制作一个包含可滚动列表视图的LinearLayout
我知道每个人都建议我们不要同时使用Android-制作一个包含可滚动列表视图的LinearLayout,android,listview,scrollview,android-linearlayout,Android,Listview,Scrollview,Android Linearlayout,我知道每个人都建议我们不要同时使用ListView和ScrollView,我完全同意。然而,我目前只能使用一个非常简单的模式,比如8tracks的个人资料页面(如下图所示),其中包括一个用户个人资料区域和他们制作的混音列表。因此,基本上,用户只需向下滚动该页面就可以了,这意味着配置文件部分将出现在屏幕顶部并逐渐消失,同时下面的列表也会滚动: 然而,目前,我所能做的就是在线性布局中包含一个列表视图,就像我这里的草图一样 使用这种设计,我只能向下滚动列表,而配置文件区域保持在同一位置,这很糟糕。
ListView
和ScrollView
,我完全同意。然而,我目前只能使用一个非常简单的模式,比如8tracks的个人资料页面(如下图所示),其中包括一个用户个人资料区域和他们制作的混音列表。因此,基本上,用户只需向下滚动该页面就可以了,这意味着配置文件部分将出现在屏幕顶部并逐渐消失,同时下面的列表也会滚动:
然而,目前,我所能做的就是在线性布局
中包含一个列表视图
,就像我这里的草图一样
使用这种设计,我只能向下滚动列表,而配置文件区域保持在同一位置,这很糟糕。因此,我正在寻找使整个页面可滚动的想法,而不仅仅是列表。请帮忙,谢谢
编辑:很抱歉这个误导性的问题。我的问题更复杂,因为选项卡的内容不仅仅是
ListView
——有些选项卡包含LinearLayout
或GridView
。同样,我想实现的是使整个页面可滚动,但是ScrollView
帮不上忙,因为如果选项卡的内容是ListView
或GridView
,这些视图将被折叠,更重要的是,这违反了设计规则。尝试在ListView上使用以下内容
listview.addHeaderView(v);
还请记住,在listview上调用setAdapter()之前必须调用此方法
listview.addHeaderView(v);
在包含用户详细信息和选项卡的线性布局中,将其作为标题添加到列表中。您可以尝试将配置文件和选项卡设置为listview的标题,然后在按下选项卡时更新listview的内容。我不知道您是否希望在滚动时选项卡从视图中消失。根据UI指南和最佳实践,建议不要在滚动视图中使用滚动内容,这样做可以防止滚动内容 当你放置两个scrollview时,android会搞不清楚哪个scrollview被触动了。因此,有时它无法传递触摸事件 但是,如果仍然想要实现滚动功能,可以使用特定视图的onTouch事件来管理它。您需要相应地设计布局 但即使需求迫使您进行这样的布局。试试这个 比如说案例有点像这样
<ScrollView android:id=”@+id/parent_scroll”
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:layout_weight=”1″
android:background=”@drawable/dotted_bg”
android:focusableInTouchMode=”false”>
<LinearLayout />
<LinearLayout />
<LinearLayout >
<ScrollView android:id=”@+id/child_scroll”
android:layout_width=”fill_parent”
android:layout_height=”fill_parent”
android:background=”@drawable/text_box_bg”>
<TextView android:id=”@+id/text_description”
android:layout_width=”fill_parent”
android:layout_height=”fill_parent”
android:textColor=”@color/gray”
android:textSize=”12dip”
android:padding=”5dip”
android:scrollbars=”vertical”/>
<!–ScrollView>
</LinearLayout>
第3步:现在为两个设置触摸侦听器。
我希望它能帮助你 我知道这已经晚了,但我现在是8tracks的开发者。您上面显示的(旧的)2.x应用程序正在重写,但我可以向您展示旧的开发人员在配置文件页面上做了什么 在开始之前,我必须说这不是最好的方法,但是8tracks应用程序(2.x)已经很旧了 所以回到代码上来…
ProfileActivity
包含一个ProfileFragment
使用以下按钮(和配置文件图像)看到的主要布局如下:
和个人资料选项卡
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone"
android:orientation="horizontal">
<include
android:id="@+id/profile_mixes_button"
layout="@layout/profile_tab" />
<include
android:id="@+id/profile_followers_button"
layout="@layout/profile_tab" />
<include
android:id="@+id/profile_following_button"
layout="@layout/profile_tab" />
</LinearLayout>
正如你所见,这是一个常规布局,有三个按钮“模拟”选项卡
选项卡的内容也由ViewSwitcher指定:
<?xml version="1.0" encoding="utf-8"?>
<ViewSwitcher xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/profile_view_switcher"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:inAnimation="@anim/fade_in_300"
android:outAnimation="@anim/fade_out_300"
android:background="@color/white">
<include
android:id="@+id/profile_loading"
layout="@layout/loading_view_full" />
<ListView
android:id="@+id/profile_content_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:cacheColorHint="#00000000"
android:divider="@null"
android:dividerHeight="0dip"
android:fadingEdge="none" />
</ViewSwitcher>
显示加载控制盘,然后切换到listview。没有其他可滚动的视图组
基本上就是这样
现在,如果您想让整个过程滚动,那么您需要使用一个自定义适配器并将上面的布局设置为标题(或者至少以一种巧妙的方式在适配器中使用getItemType)。这样,整个屏幕就是一个列表(包含列表中的所有优化)
我们(ab)在dev.;下的新8tracks应用程序中使用此选项。) 这对我来说有点混乱,因为不是所有的选项卡都包含listview。如果第一个选项卡有一个
线性布局
,而只有另外两个选项卡有列表视图
,我该怎么办?谢谢你的详细回答,但我认为你误解了我的问题(可能是我的错,因为标题似乎有误导性)。我想要实现的是能够滚动整个页面,而不仅仅是页面的一部分,因此禁用父级滚动以使子级可滚动就像在线性布局中添加一个listview,这对我来说是不可取的。您到底想要实现什么?你想让你的ListView和整个布局可以滚动吗?我刚刚编辑了我的问题和标题,请检查一下。另外,如果您对更好的设计有任何建议,我将更加感激。很遗憾我从未了解这一点,所以感谢您的启发。但遗憾的是,这也不符合我的需要,因为实际上我的选项卡中只有一个包含ListView,而其他选项卡包含GridView和LinearView,因此我必须将它们作为片段添加到选项卡中,而不是将选项卡添加为ListView的标题。获得作者的答案真是太棒了!这太聪明了,我真的很感激。虽然我已经完成了我的项目(通过放弃使用标题部分),但我相信这对我将来(以及其他人)会很有用!非常感谢。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone"
android:orientation="horizontal">
<include
android:id="@+id/profile_mixes_button"
layout="@layout/profile_tab" />
<include
android:id="@+id/profile_followers_button"
layout="@layout/profile_tab" />
<include
android:id="@+id/profile_following_button"
layout="@layout/profile_tab" />
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<ViewSwitcher xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/profile_view_switcher"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:inAnimation="@anim/fade_in_300"
android:outAnimation="@anim/fade_out_300"
android:background="@color/white">
<include
android:id="@+id/profile_loading"
layout="@layout/loading_view_full" />
<ListView
android:id="@+id/profile_content_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:cacheColorHint="#00000000"
android:divider="@null"
android:dividerHeight="0dip"
android:fadingEdge="none" />
</ViewSwitcher>