如何在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
谁可以使用固定宽度的列并使用与设备无关的整个宽度?
答案 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线程中执行的处理过多