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

Android 需要防止Listview行始终为Listview的100%宽度,android,listview,Android,Listview,目标 我希望活动中的Listview填充屏幕的宽度(以便Listview滚动条紧靠屏幕边缘显示) 然后,我希望listview行不填充100%的宽度。例如,我希望它只有400dp宽 问题 Listview行始终占据Listview宽度的100%——即使宽度应该是400dp 主列表视图的XML <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.c

目标

我希望活动中的Listview填充屏幕的宽度(以便Listview滚动条紧靠屏幕边缘显示)

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

问题

Listview行始终占据Listview宽度的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>
<?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>

Listview行的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>
<?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的结果是“行”线性布局填充了listview的100%宽度,尽管我预计只使用400dp。我已经花了4个小时试图将其正确/失败

我建议您将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"

而不是设置
android:layout\u width=“400dp”

尝试按以下方式使用
weightSum
weight

   <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>


能否显示适配器的getView()方法?行视图膨胀时,布局属性会被忽略。然而,Mikael Olsson的解决方案可能更可取,因此您的布局可以在任何大小的设备上工作。但该解决方案仍然依赖于XML工作的布局参数。您确定您的设备/仿真器宽度大于400dp吗?您还可以解释为什么要这样做,因为这听起来不是一个好的方法。这个问题完全是过时的-listview的滚动条需要紧靠屏幕的边框。我检查了适配器,但它只是膨胀了XML,没有做任何更改。是的,这是一个选项,但在xlarge屏幕上,宽度会变得非常宽(我希望有一个
layout\u max\u width
视图参数!)。我上面展示的XML将在“大型”布局设备上运行,因此总有400dp的可用空间。可能出现问题的原因是您将label1设置为匹配父项,然后将复选框宽度设置为34 dip。感谢您的想法;我将文本框更改为
wrap\u content
,但它没有影响布局。我在DDMS中检查了带有UI转储的UI,listview边界为[13413]到[7871185]。“行”线性布局边界为[13413]到[787480]。最里面的线性布局是[22420]到[555465]。这毫无意义!!我相信ListView应该从屏幕的左边缘转到右边缘。我想不起来我曾见过listview居中。如果您想要更友好的平板电脑,那么您可能需要使用ListFragment。然后将行的布局指定为400dp宽以及
weightSum=“1”
。然后为行布局中的每个视图分配一个
布局权重
。不幸的是,结果是一样的:行填充了ListView的整个宽度:-(