在LinearLayout中使用自定义适配器的Android ListViews - 无法正确滚动

时间:2015-01-14 19:36:09

标签: android android-layout

我的布局包含多个文本和按钮视图,以及两个列表视图。这些列表视图是使用项目动态填充的 - 每个项目都是带有几个TexView的LinearLayout,或者是TextView和ImageView。

简化版:

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    tools:context=".MainActivity">

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fillViewport="true" >

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

            <TextView
                android:layout_width="match_parent"
                android:layout_weight="1"
                android:layout_height="wrap_content"
                android:gravity="center_horizontal"
                />

            <ListView
                android:layout_width="match_parent"
                android:layout_weight="1"
                android:layout_height="wrap_content"/>

            <ListView
                android:layout_width="match_parent"
                android:layout_weight="1"
                android:layout_height="wrap_content"/>

        </LinearLayout>

    </ScrollView>
</LinearLayout>

添加到上述ListViews的listview元素的示例:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"/>

    <ImageView 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"/>

</LinearLayout>

我希望看到的是可滚动的整页。不是每个ListView中的单个元素。

我尝试用TableLayout而不是LinearLayout做同样的事情。我尝试了许多不同的方法,无论是否有滚动视图,并且以下其中一种情况不断发生:

  • 每个ListView中的元素都可以滚动,而整个页面主要是(部分视图被部分推离屏幕)。
  • 一切都占用了它所需要的所有空间,但页面不可滚动,元素完全从屏幕上消失。

2 个答案:

答案 0 :(得分:0)

您必须将列表视图放在滚动视图之外。如果该列表中的项目超出屏幕大小,则将滚动列表视图。将列表视图放在滚动视图之外后,其中任何一个都将单独滚动。

希望它能解决你的问题。让我知道。

答案 1 :(得分:0)

我最终不得不重新考虑我的布局。我决定使用两个可滚动的列表视图。让它们不要将屏幕移开的关键是将布局高度设置为0dp,并将每个列表视图的权重设置为1。 (当然你可以将重量设置为不同的比例,比如1和3,让一个比另一个占用更多的空间):

<LinearLayout
    ...
    android:orientation="vertical"
    >
    <ListView
        android:id="@+id/locationsListView"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"/>
    <TextView
        android:gravity="center_horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        />
    <ListView
        android:id="@+id/locationsListView"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"/>
    <TextView
        android:gravity="center_horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        />
</LinearLayout>