Android中LinearLayout布局中的XML视图项无法填充空白空间

3

我是Android的新手,我有一个线性布局列表项,并希望TextView itemName在行的其余空白处填充,而其他两个视图(itemIcon和itemTimestamp)只需占用它们需要的空间,因此使用wrap_content。我尝试过在ItemName android:layout_width上使用fill_parent和match_parent,但最终隐藏了itemTimestamp视图。我尝试了RelativeLayout,但没有成功,如果可能的话,还是喜欢使用Linearlayout。感谢您的帮助。

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/itemNotificationBuzz"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" 
     android:background="#ffff0000"     
   >

   <LinearLayout 
    android:id="@+id/notificationHeader"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"

     android:orientation="horizontal" 
     android:background="#ffff0000"
   >

     <ImageView
         android:id="@+id/notificationIcon"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:gravity="left"
         android:maxHeight="35dp"
         android:maxWidth="35dp"
         android:background="#FF000000"
         android:padding="1dp"
         android:src="@drawable/ic_action_place" />

        <TextView
            android:id="@+id/notificationName"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:padding="5dp"
            android:textSize="18sp" 
            android:textColor="@android:color/white"
            android:background="#A4C739"
            android:typeface="sans"
            android:textStyle="bold"
            android:maxLines="1"
            android:text="Fname Lname"            
            />

           <TextView
               android:id="@+id/notificationTimestamp"
               android:layout_width = "wrap_content"
                android:layout_height="wrap_content"
               android:gravity="right"

               android:background="#FF000000"
               android:ems="10"
               android:maxLines="1"
               android:text="2m"
               android:textColor="@android:color/white"
               android:typeface="sans" />

           </LinearLayout>

</RelativeLayout>
3个回答

5

如果您想使用LinearLayout,您可以在您的LinearLayout中使用weightSum属性,以及对于您的项目名称TextView,使用layout_weight,从而实现您想要的效果。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/notificationHeader"    
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#ffff0000"
    android:orientation="horizontal"
    android:weightSum="1">

    <ImageView
        android:id="@+id/notificationIcon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="#FF000000"
        android:gravity="left"
        android:maxHeight="35dp"
        android:maxWidth="35dp"
        android:padding="1dp"
        android:src="@drawable/ic_launcher"/>

    <TextView
        android:id="@+id/notificationName"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:background="#A4C739"
        android:gravity="center"
        android:maxLines="1"
        android:padding="5dp"
        android:text="Fname Lname"
        android:textColor="@android:color/white"
        android:textSize="18sp"
        android:textStyle="bold"
        android:typeface="sans"
        android:layout_weight="1"/>

    <TextView
        android:id="@+id/notificationTimestamp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="#FF000000"
        android:gravity="right"
        android:maxLines="1"
        android:text="2m"
        android:textColor="@android:color/white"
        android:typeface="sans"/>

</LinearLayout>

这将使您的项目名称填充所有空间,直到达到最后一个元素。 注意:当您使用layout_weight时,必须将layout_width设置为0dp。同时,您应该删除最后一个元素中的ems = 10,因为它会使notificationTimestamp元素具有更大的宽度,并将Name元素向左推离开一个空白区域。

1
感谢您如此迅速的回复,太棒了!这是我在 Stack Exchange 上的第一个问题,所以无法增加计数器。 - DeveloperDH

0
这里没有使用RelativeLayout的理由。你需要使用 layout-weight。你需要将 layout_width 设置为 0dp,layout-weight 设置为 1。
这是更新后的布局(顺便说一下,我删除了父级RelativeLayout,因为它没有任何用处):

<ImageView
    android:id="@+id/notificationIcon"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="left"
    android:maxHeight="35dp"
    android:maxWidth="35dp"
    android:background="#FF000000"
    android:padding="1dp"
    android:src="@drawable/ic_action_place" />

<TextView
    android:id="@+id/notificationName"
    android:layout_width="0dp"
    android:layout_weight="1"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:padding="5dp"
    android:textSize="18sp"
    android:textColor="@android:color/white"
    android:background="#A4C739"
    android:typeface="sans"
    android:textStyle="bold"
    android:maxLines="1"
    android:text="Fname Lname"
    />

<TextView
    android:id="@+id/notificationTimestamp"
    android:layout_width = "wrap_content"
    android:layout_height="wrap_content"
    android:gravity="right"

    android:background="#FF000000"
    android:ems="10"
    android:maxLines="1"
    android:text="2m"
    android:textColor="@android:color/white"
    android:typeface="sans" />


你必须拥有某种类型的布局,并且它必须具有 android:weightSum=1 - Menasheh

0

您可以直接使用RelativeLayout来实现您想要的效果。答案已经在这里 如何让布局与视图填充剩余空间?

如果您仍然想使用LinearLayout,则也是可能的。在这种情况下,为了实现您想要的效果,请将您想要仅包装内容的小部件的layout_weight属性设置为0(仍应将它们设置为wrap_content),然后将您想要占用剩余空间的小部件的layout_weight设置为1。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接