具有固定部件的清单布局

时间:2011-04-21 12:44:33

标签: android

我正在尝试制作一个清单的布局,它有这种类型的行: enter image description here

其中:

  • A是CheckBox(固定大小)
  • 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&amp; C只会填充可用空间?

3 个答案:

答案 0 :(得分:1)

你应该使用RelativeLayout作为主要容器,
首先放A,然后放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

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

答案 1 :(得分: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>

答案 2 :(得分:0)

即使上面的答案有效,我建议更换LinearLayout并更改中间2个TextView的对齐方式,因为你已经在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" />

一般来说,最好保存布局数量,特别是因为这是列表项的布局,但我认为Romain Guy更好地解释了这个here;)