带有match_parent的ListView在填充项目时不尊重父级的权重。为什么?

时间:2014-02-01 14:21:36

标签: android android-layout

我在2个不同的LinearLayouts中有2个Listviews。 2个linearlayouts是更复杂的UI的一部分,2个LinearLayouts的高度是权重值。 里面的2个Listviews只填充父级(LinearLayout)。一切正常,直到我开始用项目填充ListViews。 当我用第10个项目填充第一个listView时,第一个listView开始吃位并从第二个listview获取位置,所以最后第二个listview占用的空间比第一个更少。这不是一个理想的行为。我需要修复ListView。

这是代码。将省略不需要的代码:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:weightSum="9"
android:orientation="vertical" >
  ...
  <LinearLayout
  android:id="@+id/secondPart"
  android:layout_width="match_parent"
  android:layout_height="0dp"
  android:orientation="vertical"
  android:weightSum="9.1"
  android:layout_weight= "9">

    <LinearLayout
        android:id="@+id/Screen1"
        android:layout_width="wrap_content"
        android:layout_height="0dp"
        android:layout_weight="4.5"
        android:orientation="vertical" >

                <ListView 
                    android:id = "@+id/lvMain1"
                    android:orientation="vertical"
                    android:layout_height = "match_parent"
                    android:layout_width="match_parent"/>


     </LinearLayout>   

     <LinearLayout 
                    android:id = "@+id/timerContainer2"
                    android:orientation="horizontal"
                    android:layout_weight="0.1"
                    android:layout_height = "0dp"
                    android:layout_width="match_parent">


       ....

    </LinearLayout>

    <LinearLayout 
        android:id = "@+id/Screen2"
        android:orientation="vertical"
        android:layout_weight="4.5"
        android:layout_height ="0dp"
        android:layout_width="match_parent">

                 <ListView 
                    android:id = "@+id/lvMain2"
                    android:orientation="vertical"
                    android:layout_height = "match_parent"
                    android:layout_width="match_parent"/>


    </LinearLayout>

   </LinearLayout>

 </LinearLayout>

定义整个UI的权重,为9.1

3 个答案:

答案 0 :(得分:1)

改变这个:

 <LinearLayout
    android:id="@+id/Screen1"
    android:layout_width="wrap_content"
    android:layout_height="0dp"
    android:layout_weight="4.5"
    android:orientation="vertical" >

            <ListView 
                android:id = "@+id/lvMain1"
                android:orientation="vertical"
                android:layout_height = "match_parent"
                android:layout_width="match_parent"/>


 </LinearLayout>   

要:

  <ListView 
                android:id = "@+id/lvMain1"
                android:orientation="vertical"
                android:layout_height="0dp"
                android:layout_weight="4.5"
                android:layout_width="match_parent"/>

我不确定这会解决您的确切问题,但此处不需要线性布局。

答案 1 :(得分:0)

很抱歉很费时间。 这是我的错。

在代码方面,我设置了Screen1和Screen2的重量

并以某种方式我通过代码改变了宽度和高度:

    LinearLayout.LayoutParams params = 
            new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
    LinearLayout.LayoutParams params2 = 
            new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);

我只想改变体重:

params.weight = 4.5f;

但是没有在构造函数中放置正确的宽度和高度。

答案 2 :(得分:0)

根据我的理解,你想要这样的东西:

<强> XML:

<?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="match_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="vertical" >

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

    <Button
        android:id="@+id/button1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Seperator" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="vertical" >

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

</LinearLayout>

Java代码:

public class MYList extends Activity {

    ListView listTOP,listBottom;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.demo2);

        ArrayList<String> data = new ArrayList<String>();

        for(int i=0;i<11;i++)
        {
            data.add("Item "+(i+1));
        }

        listTOP = (ListView)findViewById(R.id.listView1);
        listBottom = (ListView)findViewById(R.id.listView2);

        listTOP.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1,data));
        listBottom.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1,data));
    }

}