垂直LinearLayout中的两个ListView

时间:2014-10-22 12:15:31

标签: android android-layout listview android-listview android-linearlayout

我需要在垂直ListView中安排两个LinearLayout,以便第二个ListView位于第一个ListView的最后一个项目的末尾。

如果ListView1为空,则视图应该是这样的。

First ListView is empty

随着ListView1.size()的增加,ListView2应该被拉低到极限。

enter image description here

ListView1达到固定高度(或重量),它应该停止扩展并开始滚动。 enter image description here

我认为android中没有方法为View设置maxHeight。

我已经尝试过几乎所有的layout_height =“wrap_content”组合,两个ListView的固定高度和权重。在所有情况下, 第一个要求(image1)将失败:ListView1将不在顶部 或最后一个要求(image3)将失败:ListView2将被推出屏幕。

任何帮助或建议将不胜感激。提前谢谢。

修改

我目前的代码是:

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

    <ListView
        android:id="@+id/myOrderListView"
        android:layout_width="match_parent"
        android:layout_height="0dip"
        android:layout_weight="0.6" >
    </ListView>

    <ListView
        android:id="@+id/myCompletedOrderListView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:layout_weight="0.4" >
    </ListView>
</LinearLayout>

我尝试过不同的重量组合,例如:

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

    <ListView
        android:id="@+id/myOrderListView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="0.6" >
    </ListView>

    <ListView
        android:id="@+id/myCompletedOrderListView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:layout_weight="0.4" >
    </ListView>
</LinearLayout>

但它最后的要求会失败。

编辑2: @dangVarmit

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

    <ListView
        android:id="@+id/myOrderListView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    </ListView>

    <ListView
        android:id="@+id/myCompletedOrderListView"
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:layout_marginTop="20dp" >
    </ListView>

    <Space
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1" />

</LinearLayout>

如果你的意思是这样,那仍然是req3。

3 个答案:

答案 0 :(得分:0)

您可以在左右列表视图中找到以下代码,您可以将其更改为上方和下方列表视图,或者您想要显示 main_activity.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <LinearLayout
        android:id="@+id/main_top_bit"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:background="@color/orange">

            <LinearLayout android:layout_width="wrap_content"
                android:layout_height="wrap_content" android:orientation="horizontal">

                <Button
                    android:id="@+id/button_1"
                    style="@style/landscape_top_button"
                    android:text="button1" />
                <Button
                    android:id="@+id/button_2"
                    style="@style/landscape_top_button"
                    android:text="button2"/>
            </LinearLayout>


        </LinearLayout>
        <View android:id="@+id/main_horizontal_bar"
            android:layout_height="3dip" android:layout_width="fill_parent"
            android:background="@color/gray" android:layout_marginTop="1dip" />
    </LinearLayout>

    <LinearLayout
        android:id="@+id/lower_linear_layout"
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_below="@+id/main_top_bit">

        <RelativeLayout
            android:layout_below="@+id/lower_linear_layout"
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="150dip"
            android:layout_height="fill_parent"
            android:layout_alignParentLeft="true">

            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal"
                android:background="@color/teal"
                android:id="@+id/org_left_linearlayout2">

                <Button
                    android:id="@+id/button_3"
                    style="@style/landscape_top_button"
                    android:text="button3"/>
                <Button
                    android:id="@+id/button_4"
                    style="@style/landscape_top_button"
                    android:text="button4" />
            </LinearLayout>

            <ListView
                android:background="@color/green"
                android:id="@+id/lstLeft"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_below="@+id/org_left_linearlayout2"
                android:layout_above="@+id/org_left_bottom_rl"
                android:cacheColorHint="#00000000"/>

            <RelativeLayout
                android:id="@+id/org_left_bottom_rl"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentBottom="true"
                android:background="@color/purple" >

                <Button
                    android:text="button5"
                    android:id="@+id/button_5"
                    android:layout_alignParentLeft="true"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content">
                </Button>
            </RelativeLayout>
        </RelativeLayout>

        <View
            android:layout_width="3dip"
            android:layout_height="fill_parent"
            android:background="@color/gray">
        </View>

        <RelativeLayout
            android:layout_below="@+id/lower_linear_layout"
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"

            android:layout_alignParentLeft="true">

            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal"
                android:background="@color/olive"
                android:id="@+id/org_right_linearlayout2">

                <Button
                    android:id="@+id/button_6"
                    style="@style/landscape_top_button"
                    android:text="button6" />
                <Button
                    android:id="@+id/button_7"
                    style="@style/landscape_top_button"
                    android:text="button7" />
            </LinearLayout>

            <ListView
                android:id="@+id/lstRight"
                android:background="@color/blue"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_below="@+id/org_right_linearlayout2"
                android:layout_above="@+id/org_right_bottom_rl"
                android:cacheColorHint="#00000000"/>

            <RelativeLayout
                android:id="@+id/org_right_bottom_rl"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@color/red"
                android:layout_alignParentBottom="true">

                <Button
                    android:text="button8"
                    android:id="@+id/button_8"
                    android:layout_alignParentRight="true"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content">
                </Button>
            </RelativeLayout>
        </RelativeLayout>
    </LinearLayout>
</LinearLayout>

MainActivity.java

public class MainActivity extends Activity {
    private final String TAG =  this.getClass().getName();
    ListView leftList;
    ListView rightList;


     static final String[] FRUITS = new String[] {"Apple", "Bananna", "Cherry", "Pear", "Strawberry"};
     static final String[] VEGETABLES = new String[] {"Asparagus", "Bamboo shoots", "Celery", "Ginger", "Spinach"};

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        leftList = (ListView) findViewById(R.id.lstLeft);
        rightList = (ListView) findViewById(R.id.lstRight);      

        populateLeftList();
        populateRightList();
    }

    public void populateLeftList(){
        leftList.setAdapter(new ArrayAdapter<string>(this, android.R.layout.simple_list_item_1, FRUITS));  
    }

    public void populateRightList(){
        rightList.setAdapter(new ArrayAdapter<string>(this, android.R.layout.simple_list_item_1, VEGETABLES));
    }
}

答案 1 :(得分:0)

  • for list1,layout_height = wrap_content,remove layout_weight
  • for list2,layout_height = 100dp(任何固定值),删除layout_weight
  • add&lt; Space layout_weight = 1 layout_height = 0dp /&gt;在列表的末尾。

应该可以为您提供所需的结果。

答案 2 :(得分:0)

我自己找到了一个解决方案。它完全按照我的意愿工作。我不知道这是不是一个好方法。我正在寻找xml解决方案。

getDeviceHeight()是我查找设备高度的方法,以像素为单位。 200是My ListViews上方其他ui元素的近似高度。 myorderList是我的第一个ListView

if(myorderList.getHeight() > ((getDeviceHeight()/2) - 200)) {
    LayoutParams params = myorderList.getLayoutParams();
    params.height = (int)((getDeviceHeight()/2) - 200);
    myorderList.setLayoutParams(params);
}

当第一个ListView发生任何类型的更改时,应该这样做。

修改 当物品在达到最大高度后被移除时,这也会失败: - (