2011-04-21 31 views
3

我试图做一个清单,其中有这种类型列的布局: enter image description here与固定部分清单布局

其中:

  • A是一个复选框(它是固定大小)
  • B是一个TextView(应该伸展的所有可用空间)
  • C是一个TextView(应该伸展的所有可用空间)
  • d是一个TextView(它是固定大小)
  • E是父,列表的行

这是我layout.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:gravity="center_vertical"> 
    <CheckBox android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 
    <LinearLayout android:orientation="vertical" 
    android:layout_width="wrap_content" 
     android:layout_height="60dp" 
     android:layout_weight="1" 
     android:paddingRight="6dp" 
     android:gravity="center_vertical"> 
     <TextView android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:layout_marginLeft="6dp" 
      android:gravity="center_vertical" 
      android:textAppearance="?android:attr/textAppearanceMedium" 
      android:singleLine="true" /> 
     <TextView android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginLeft="6dp" 
      android:gravity="center_vertical" 
      android:textAppearance="?android:attr/textAppearanceSmall" 
      android:singleLine="true" /> 
    </LinearLayout> 
    <TextView android:layout_width="wrap_content" 
    android:layout_height="60dp" 
     android:layout_weight="2" 
     android:layout_marginLeft="6dp" 
     android:layout_marginRight="6dp" 
     android:gravity="center_vertical|right" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:textColor="#2B78E4" /> 
</LinearLayout> 

而且我得到这个结果:

enter image description here

第一行在B和C上有很长的内容,因此D根本没有出现。

第二行的内容很长,但比第一行更短,因此D被缩小。

第三行的内容很短,D显示正确。

如何修改我的布局,使D始终正确显示,并且B将仅填充可用空间?

+0

对于模型布局结构的好的,制定的问题+1! – rekaszeru 2011-04-21 13:23:58

回答

1

你应该使用的RelativeLayout,作为主容器,
先放,然后把d,之后他们把B和C

所以,你的新布局会是什么样子:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" android:layout_width="fill_parent" 
    android:layout_height="fill_parent" android:gravity="center_vertical"> 
    <CheckBox android:id="@+id/checkbox" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 
    <TextView android:id="@+id/textView" android:layout_alignParentRight="true" 
     android:layout_width="wrap_content" android:layout_height="60dp" 
     android:layout_marginLeft="6dp" android:layout_marginRight="6dp" 
     android:gravity="center_vertical|right" android:layout_weight="2" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:textColor="#2B78E4" /> 
    <TextView android:id="@+id/txt1" 
     android:layout_width="fill_parent" android:layout_height="wrap_content" 
     android:layout_marginLeft="6dp" android:layout_marginTop="6dp" 
     android:layout_toRightOf="@id/checkbox" android:layout_toLeftOf="@id/textView" 
     android:gravity="center_vertical" android:singleLine="true" 
     android:textAppearance="?android:attr/textAppearanceMedium" /> 
    <TextView android:id="@+id/txt2" android:layout_below="@id/txt1" 
     android:layout_width="fill_parent" android:layout_height="wrap_content" 
     android:layout_marginLeft="6dp" android:layout_marginTop="3dp" 
     android:layout_toRightOf="@id/checkbox" android:layout_toLeftOf="@id/textView" 
     android:gravity="center_vertical" android:singleLine="true" 
     android:textAppearance="?android:attr/textAppearanceSmall" /> 
</RelativeLayout> 

你当然应该根据您的偏好更改复选框和textview的ID。

这样,你的输出看起来在风景和肖像模式是一致的:

list protraitlist landscape

更新布局和屏幕截图(所提供的输出相匹配)。

+0

非常明确的答案,谢谢截图:) – 2011-04-21 17:43:36

0

我不得不改变你的XML

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"> 
    <CheckBox 
    android:id="@+id/ckb" 
    android:gravity="center_vertical" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" /> 
    <RelativeLayout 
    android:layout_centerInParent="true" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_toRightOf="@+id/ckb" 
    android:layout_toLeftOf="@+id/txt"> 

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="60dp" 
     android:layout_weight="1" 
     android:paddingRight="6dp" 
     android:gravity="center_vertical" 
     android:orientation="vertical"> 
     <TextView 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="6dp" 
     android:gravity="center_vertical" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:singleLine="true" /> 
     <TextView 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="6dp" 
     android:gravity="center_vertical" 
     android:textAppearance="?android:attr/textAppearanceSmall" 
     android:singleLine="true" /> 
    </LinearLayout> 
    </RelativeLayout> 
    <TextView 
    android:id="@+id/txt" 
    android:layout_width="wrap_content" 
    android:layout_height="60dp" 
    android:layout_weight="2" 
    android:layout_marginLeft="6dp" 
    android:layout_marginRight="6dp" 
    android:gravity="center_vertical" 
    android:layout_alignParentRight="true" 
    android:textAppearance="?android:attr/textAppearanceMedium" 
    android:textColor="#2B78E4" /> 
</RelativeLayout> 
0

即使上述答案的作品,我建议更换的LinearLayout,改变中间的2个TextViews的排列,因为你已经在一个RelativeLayout中。

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" android:layout_height="60dp"> 
    <CheckBox android:layout_alignParentLeft="true" 
     android:layout_height="wrap_content" android:layout_width="wrap_content" 
     android:id="@+id/checkBox1" android:layout_centerVertical="true" /> 
    <TextView android:lines="1" android:id="@+id/textView1" 
     android:text="Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. " 
     android:layout_height="wrap_content" android:layout_width="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:layout_toRightOf="@+id/checkBox1" 
     android:layout_alignTop="@+id/checkBox1" 
     android:layout_toLeftOf="@+id/textView3" 
     android:layout_marginLeft="6dp" /> 
    <TextView android:id="@+id/textView2" 
     android:text="Lorem ipsum dolor sit amet, consetetur sadip" 
     android:layout_height="wrap_content" android:layout_width="wrap_content" 
     android:layout_below="@+id/textView1" android:layout_alignLeft="@+id/textView1" 
     android:textAppearance="?android:attr/textAppearanceSmall" 
     android:lines="1" android:layout_toLeftOf="@+id/textView3" /> 
    <TextView android:id="@+id/textView3" android:text="TextView" 
     android:layout_height="match_parent" android:layout_width="wrap_content" 
     android:layout_alignParentRight="true" android:gravity="center_vertical|right" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:textColor="#2B78E4" android:layout_marginLeft="6dp" /> 

一般来说这是很好的做法,以节省布局的量,especiallay因为这是你的列表项的布局,但我认为罗曼盖伊是解释这个here更好;)