Android 固定ListView的宽度

Android 固定ListView的宽度,android,listview,android-listview,Android,Listview,Android Listview,我使用权重将屏幕分为三部分。其中一个是listview,另外两个是ImageView。但是我的listview占据了整个屏幕。有人能合乎逻辑地解释我做错了什么吗 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="h

我使用权重将屏幕分为三部分。其中一个是listview,另外两个是ImageView。但是我的listview占据了整个屏幕。有人能合乎逻辑地解释我做错了什么吗

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal" >

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

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

</LinearLayout>

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

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_launcher" />

</LinearLayout>

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_weight="1"
    android:orientation="vertical" >
    <ImageView
        android:id="@+id/imageView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_launcher" />
</LinearLayout>

并且listview被填充为

    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, new String[]{"first","second"});
    listview = (ListView)this.findViewById(R.id.listView1);
    listview.setAdapter(arrayAdapter);
    }
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ArrayAdapter ArrayAdapter=新的ArrayAdapter(这是android.R.layout.simple_list_item_1,新字符串[]{“first”,“second”});
listview=(listview)this.findViewById(R.id.listView1);
setAdapter(arrayAdapter);
}
试试这个

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal" >

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

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

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

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_launcher" />
</LinearLayout>

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

    <ImageView
        android:id="@+id/imageView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_launcher" />
</LinearLayout>


将listview的宽度设置为0dp,并且在我将listview的宽度设置为0dp时,所有包含该内容权重的列表都将立即设置为0dp。列表视图不可见。屏幕现在已正确划分为多个部分,但列表不可见,抱歉,这意味着您的listview容器没有很好地阅读它。。。但我陈述的第二部分是正确的:P只要你设定一个权重,确保你的宽度是0。原因是,如果您设置的实际尺寸不是0,它会测量该尺寸,然后重新测量以处理重量。这是低效的,最好将其设置为0,让权重完成它的工作。它通过将所有容器宽度设置为0dp来工作。就像下面提到的奇特朗。谢谢您能解释一下为什么必须为容器设置0dp吗?请看一下注释,如果您设置了权重,那么它将测量布局宽度属性,然后重新测量以处理您的权重。由于它已经在测量权重,只需将宽度设置为0,否则将重新测量所有加权视图。谢谢,它成功了。你能解释一下为什么容器宽度必须设置为0dp吗?@yagnasri看看我在你的问题中的评论,你能理解吗