Android 需要防止Listview行始终为Listview的100%宽度
目标 我希望活动中的Listview填充屏幕的宽度(以便Listview滚动条紧靠屏幕边缘显示) 然后,我希望listview行不填充100%的宽度。例如,我希望它只有400dp宽 问题 Listview行始终占据Listview宽度的100%——即使宽度应该是400dp 主列表视图的XMLAndroid 需要防止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
<?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的整个宽度:-(