未定义 layoutweight 属性时视图消失

Views disappear when no layoutweight attribute is defined

我有布局(列表项):

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="74dp"
    android:background="@drawable/button_background">

    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="@color/list_separator"
        android:id="@+id/event_separator"
        android:layout_marginLeft="14dp"
        android:layout_marginRight="14dp" />

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="73dp"
        android:gravity="center_vertical">

        <RelativeLayout
            android:layout_width="65dp"
            android:layout_height="match_parent">

            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/icon"
                android:layout_centerVertical="true"
                android:layout_centerHorizontal="true" />

        </RelativeLayout>

        <TextView
            android:id="@+id/event"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ellipsize="marquee"
            android:maxLines="2"
            android:text="Text text text"
            android:textColor="@color/text"
            android:textSize="14sp" />

        <TextView
            android:id="@+id/event_time"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:maxLines="2"
            android:text="2014.05.13\n16.20:33"
            android:textColor="@color/text_faded"
            android:textSize="10sp"
            android:gravity="center|right"
            android:layout_marginRight="14dp"
            android:layout_marginEnd="14dp"/>

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/event_delete"
            android:src="@drawable/ic_delete" />


    </LinearLayout>

</LinearLayout>
  1. 第一个View只是列表分隔符
  2. 然后有一个 ImageView 图标
  3. 文本 TextView (id.event)
  4. 时间戳TextView(id.event_time)
  5. 另一个图标'ImageView' (id.event_delete)

不行,我期待得到

[       1      ]
[2][  3  ][4][5]

但我明白了

[       1      ]
[2][     3     ]

4 和 5 不可见(不适合屏幕)。

当我添加 layout_weight="1" 时,它有点工作,但我不知道为什么:

<TextView
    android:id="@+id/event"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:ellipsize="marquee"
    android:maxLines="2"
    android:text="Text text text"
    android:textColor="@color/text"
    android:textSize="14sp"
    android:layout_weight="1" />

替换此

android:layout_width="match_parent" 

来自

android:layout_width="wrap_content"

你的 textview @+id/event

您将 textview 宽度指定为 match_parent,因此它将占据所有宽度,因此 4 和 5 不可见

编辑:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="74dp"
    android:background="#ffffff"
    android:orientation="vertical" >

    <View
        android:id="@+id/event_separator"
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:layout_marginLeft="14dp"
        android:layout_marginRight="14dp"
        android:background="#000000" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="73dp"
        android:gravity="center_vertical"
        android:orientation="horizontal"
        android:weightSum="5" >

        <RelativeLayout
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1" >

            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerHorizontal="true"
                android:layout_centerVertical="true"
                android:src="@drawable/ic_launcher" />
        </RelativeLayout>

        <TextView
            android:id="@+id/event"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="2"
            android:ellipsize="marquee"
            android:maxLines="2"
            android:text="Text text text"
            android:textColor="#000000"
            android:textSize="14sp" />

        <TextView
            android:id="@+id/event_time"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginEnd="14dp"
            android:layout_marginRight="14dp"
            android:layout_weight="1"
            android:gravity="center|right"
            android:maxLines="2"
            android:text="2014.05.13\n16.20:33"
            android:textColor="#000000"
            android:textSize="10sp" />

        <ImageView
            android:id="@+id/event_delete"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:src="@drawable/ic_launcher" />
    </LinearLayout>

</LinearLayout>

如果您想要它就像您指定的那样,您最好将 android:layout_weight 提供给第二个 LinearLayout 中的所有视图,并按照 here 所述设置 android:layout_width="0dp"

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="73dp"
    android:gravity="center_vertical">

    <RelativeLayout
        android:layout_width="65dp"
        android:layout_height="match_parent">

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/icon"
            android:layout_centerVertical="true"
            android:layout_centerHorizontal="true" />

    </RelativeLayout>

    <TextView
        android:id="@+id/event"
        android:layout_width="0dp"
        android:layout_weight="2"
        android:layout_height="wrap_content"
        android:ellipsize="marquee"
        android:maxLines="2"
        android:text="Text text text"
        android:textColor="@color/text"
        android:textSize="14sp" />

    <TextView
        android:id="@+id/event_time"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        android:maxLines="2"
        android:text="2014.05.13\n16.20:33"
        android:textColor="@color/text_faded"
        android:textSize="10sp"
        android:gravity="center|right"
        android:layout_marginRight="14dp"
        android:layout_marginEnd="14dp"/>

    <ImageView
        android:scaleType="fitCenter"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        android:id="@+id/event_delete"
        android:src="@drawable/ic_delete" />


</LinearLayout>