需要防止Listview行始终是Listview的100%宽度

时间:2013-09-13 20:19:01

标签: android listview

目标

我希望Listview在活动中填充屏幕的宽度(以便列表视图滚动条显示在屏幕边缘)。

然后我希望listview Row不填充100%的宽度。例如,我希望它只有400dp宽。

问题

列表视图行总是占据列表视图宽度的100% - 即使宽度应该是400dp。

主要列表视图的XML

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/background_image">

    <LinearLayout
            android:id="@+id/Envelope"
            android:orientation="vertical"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_below="@id/prompt"
            android:layout_marginTop="10dip"
            android:layout_marginLeft="10dip"
            android:layout_marginRight="10dip"
            android:gravity="center_horizontal">

        <ListView android:id="@+id/list"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dip"
            android:layout_marginBottom="15dip"
            android:divider="#00FFFFFF"
            android:dividerHeight="7dip"
            android:cacheColorHint="#00000000"
            android:drawSelectorOnTop="false"
            android:background="#00FFFFFF"
            android:scrollbarStyle="outsideOverlay" />

    </LinearLayout>

</RelativeLayout>

Listview行的XML

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/row"
        android:layout_width="400dp"
        android:layout_height="wrap_content"
        android:background="@drawable/bg">
        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical">

            <TextView android:id="@+id/label1"
                      android:layout_width="match_parent"
                      android:layout_height="wrap_content"
                      android:layout_weight="1"
                      android:textSize="16sp"
                      android:layout_gravity="left|center_vertical"
                      android:paddingLeft="20dip"             
                      android:paddingRight="10dip" />

            <TextView android:id="@+id/label2"
                      android:layout_width="wrap_content"
                      android:layout_height="wrap_content"
                      android:layout_weight="0"
                      android:textSize="16sp"
                      android:layout_gravity="right|center_vertical"
                      android:paddingLeft="10dip"             
                      android:paddingRight="10dip"/>

            <CheckBox android:id="@+id/checkbox" 
                      android:layout_width="34dip" 
                      android:layout_height="34dip"
                      android:layout_gravity="right|center_vertical"
                      android:duplicateParentState="true"
                      android:button="@drawable/checkbox_states"/>
        </LinearLayout>

</LinearLayout>

该XML的结果是“row”linearlayout填充了listview宽度的100%,即使我只希望使用400dp。我花了4个小时试图让它变得正确/沮丧

2 个答案:

答案 0 :(得分:2)

而不是设置android:layout_width="400dp"

尝试以下列方式使用weightSumweight

   <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/row"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:weightSum="1"
        android:background="@drawable/bg"
        android:orientation="horizontal"
         >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight=".7"
             android:orientation="horizontal"
            >

            <TextView android:id="@+id/textEmp_id"
                          android:layout_width="wrap_content"
                          android:layout_height="wrap_content"
                          android:textSize="16sp"
                          android:layout_gravity="left|center_vertical"
                          android:paddingLeft="20dip"             
                          android:paddingRight="10dip" />

                <TextView android:id="@+id/label2"
                          android:layout_width="wrap_content"
                          android:layout_height="wrap_content"
                          android:textSize="16sp"
                          android:layout_gravity="right|center_vertical"
                          android:paddingLeft="10dip"             
                          android:paddingRight="10dip"/>

                <CheckBox android:id="@+id/checkbox" 
                          android:layout_width="34dip" 
                          android:layout_height="34dip"
                          android:layout_gravity="right|center_vertical"
                          android:duplicateParentState="true"
                          android:button="@drawable/checkbox_states"/>


        </LinearLayout>
         <View
                android:layout_width="30dp"
                android:layout_height="wrap_content"
                android:layout_weight=".3"
                />

    </LinearLayout>

答案 1 :(得分:1)

我建议您将ListView行设置为与其父级匹配。 您不能总是假设可用宽度为400dp。也 设置左右边距以获得一些空间。

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/row"
    android:layout_width="match_parent"
    android:layout_marginLeft="10dp"      
    android:layout_marginRight="10dp"