【问题标题】:Android LinearLayout View item in xml does not fill empty spacexml中的Android LinearLayout View项目不填充空白
【发布时间】:2015-02-13 22:38:46
【问题描述】:

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

【问题讨论】:

    标签: android xml android-layout


    【解决方案1】:

    如果您想使用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 元素推到左侧留下一个空白空间。

    【讨论】:

    • 感谢这么快的反应,完美,这是我关于堆栈交换的第一个问题,因此无法增加计数器
    【解决方案2】:

    你可以直接使用RelativeLayout来实现你想要的。答案已经在这里How to make layout with View fill the remaining space?

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

    【讨论】:

      【解决方案3】:

      这里没有理由使用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" />
      

      【讨论】:

      • 你必须有某种类型的布局,它必须有android:weightSum=1
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-15
      • 1970-01-01
      • 1970-01-01
      • 2013-10-07
      相关资源
      最近更新 更多