首页 文章

xml中的Android LinearLayout View项不会填充空白区域

提问于
浏览
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 回答

  • 0

    如果你想使用LinearLayout,你可以通过在LinearLayout中使用 weightSum 属性和 layout_weight 为你的项目Name TextView实现你想要的 .

    <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>
    

    这将使您的项目名称填充所有空格,直到它到达最后一个元素 . Note :使用layout_weight时,必须将layout_width设置为0dp . 此外,您应该从最后一个元素中删除ems = 10,因为它会使您的notificationTimestamp元素具有更大的宽度,并且它会将Name元素向左推,留下空白空间 .

  • 0

    您可以直接使用RelativeLayout来实现您想要的效果 . 答案已经在How to make layout with View fill the remaining space?

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

  • 4

    这里没有理由使用RelativeLayout . 您需要使用的是布局权重 . 您需要将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" />
    

相关问题