问题描述
|
我有一个LinearLayout,它具有四个水平放置的视图。第一个和最后一个分量是设定的大小。对于内部两个视图,我只想共享50:50的可用空间。我将每个权重都设置为\“ 1 \”,但是在对视图进行布局时,根据视图所容纳的内容,视图的大小会有所不同。
这是我的布局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=\"wrap_content\">
<ImageView
android:id=\"@+id/status\"
android:src=\"@drawable/white\"
android:paddingRight=\"10dip\"
android:layout_height=\"35dip\"
android:layout_width=\"35dip\">
</ImageView>
<TextView android:id=\"@+id/name\"
android:text=\"Name\"
android:layout_height=\"fill_parent\"
android:layout_toRightOf=\"@id/status\"
android:layout_width=\"wrap_content\"
android:layout_weight=\"1\"
android:textSize=\"25dip\">
</TextView>
<TextView android:id=\"@+id/description\"
android:text=\"Description\"
android:layout_toRightOf=\"@id/name\"
android:layout_height=\"fill_parent\"
android:layout_width=\"wrap_content\"
android:layout_weight=\"1\"
android:textSize=\"25dip\">
</TextView>
<TextView android:id=\"@+id/time\"
android:text=\"Time\"
android:layout_width=\"wrap_content\"
android:layout_height=\"fill_parent\"
android:layout_toRightOf=\"@id/description\"
android:textSize=\"25dip\">
</TextView>
</LinearLayout>
显然,这些不是实际的列名,但出于隐私目的,我对其进行了更改。 ListView使用此布局,该视图将每个视图的文本更改为其呈现的任何值。名称和说明字段应对齐,因为它们都获得了剩余屏幕的50%,但名称较长时,说明将向右移动。为什么?
解决方法
要考虑重量,布局尺寸必须为0(零)
<TextView android:id=\"@+id/name\"
android:text=\"Name\"
android:layout_height=\"fill_parent\"
android:layout_width=\"0dip\"
android:layout_weight=\"1\"
android:textSize=\"25dip\">
</TextView>
我还建议您将体重加起来等于1(并使用分数)或100。
因此,每个视图使用50或.5代替1。 LinearLayout代码可以在任何权重总和下正常工作,但是如果您以后要用其他部分修改视图,则变得很困难。
另外,如果您不使用相对布局,请摆脱toRightOf属性。少即是多。
,尝试在所有ѭ3children的子级中使用android:layout_width=\"fill_parent\"
而不是\“ wrap_content \”。或者更好的是,在您的xml中建立这样的结构:
<RelativeLayout>
<ImageView /> # status,fixed width,alignParentLeft=\"true\"
<TextView /> # time,alignParentRight=\"true\"
<LinearLayout> # layout_width=\"fill_parent\",toLeftOf=\"time\" toRightOf=\"status\"
<TextView /> # name,use layout_weight=\"1\"
<TextView /> # description,use layout_weight=\"1\"
</LinearLayout>
</RelativeLayout>
这应该做您想要的。使用LinearLayout
代替RelativeLayout
也可以,但您必须进行一些试验(我相信像我的示例一样,使用嵌套Layout即可完成工作)。