ListView Android中的列

时间:2010-08-31 20:19:41

标签: android listview

如何在Android ListView中创建列?我有这个列表项布局xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" android:layout_height="fill_parent"
    android:orientation="horizontal">
    <TextView android:layout_weight=".3" android:layout_width="wrap_content"
        android:layout_height="fill_parent" android:id="@+id/hour"
        android:gravity="center" />
    <ImageView android:id="@+id/symbol" android:scaleType="fitCenter"
        android:layout_gravity="center_horizontal" android:layout_width="wrap_content"
        android:layout_height="wrap_content" android:layout_weight=".5" />
    <TextView android:layout_weight=".8" android:layout_width="wrap_content"
        android:layout_height="fill_parent" android:id="@+id/temperature"
        android:gravity="center" />
    <TextView android:layout_weight="1" android:layout_width="wrap_content"
        android:layout_height="fill_parent" android:id="@+id/percipitation"
        android:gravity="center" />
    <TextView android:layout_weight="1" android:layout_width="wrap_content"
        android:layout_height="fill_parent" android:id="@+id/wind_speed"
        android:gravity="center" />
    <TextView android:layout_weight="1" android:layout_width="wrap_content"
        android:layout_height="fill_parent" android:id="@+id/wind_direction"
        android:gravity="center" />
</LinearLayout>

问题出在f.ex. wind_direction从“4”变为“300”,然后列不对齐。

The problem http://img185.imageshack.us/img185/2812/deviceo.png

谁可以使用固定宽度的列并使用与设备无关的整个宽度?

5 个答案:

答案 0 :(得分:7)

您可以在项目布局xml中使用layout_weight与layout_width为0,如下所示:

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"  
    android:id="@+id/relativeLayout1" 
    android:layout_width="fill_parent"  
    android:layout_height="fill_parent" >  

    <TextView  
         android:id="@+id/text1" 
         android:layout_width="0dp"  
         android:layout_height="wrap_content" 
         android:layout_weight="1"/>  

    <TextView  
         android:id="@+id/text2" 
         android:layout_width="0dp"  
         android:layout_height="wrap_content" 
         android:layout_weight="2"/>
</LinearLayout>

基本上,0dp的layout_width强制所有文本视图都没有宽度。由于在确定文本视图的宽度之后根据layout_weight抛出线性布局中的备用宽度,因此在具有相同宽度(0)的文本框中以均匀的游戏场开始。没有0宽度,文本框以不同的宽度开始,添加额外的空间(通过layout_weight)仍然使文本框的宽度不同。

答案 1 :(得分:3)

考虑使用TableLayout而不是ListView。这被设计为具有行和列。请参阅Hello TableLayout

要以编程方式添加行,可以使TableRow膨胀并在TableLayout上调用addView。

答案 2 :(得分:2)

你可以在TextViews上执行其中一个而不是wrap_content:

android:layout_width="40dip"

以上设置了与密度无关的宽度,或

android:layout_weight="2"

可用于设置每个文本视图的百分比宽度。

另见这篇文章和链接: What is the difference between "px", "dp", "dip" and "sp" on Android?

答案 3 :(得分:1)

合并两者。尝试使用TableLayout而不是LinearLayout作为列表项包装器。我想我曾经在某个地方看到过这项工作。从来没有尝试过。

http://www.vbsteven.be/blog/using-the-simpleadapter-with-a-listview-in-android/

答案 4 :(得分:1)

如果要显示大量数据,请不要使用TableLayout。性能和内存消耗是可怕的。可能需要几秒钟才能显示您的数据,并且您将获得Choreographer错误,即您的应用在UI线程中执行的处理过多