Android LinearLayout View item in xml does not fill empty space
我是android的新手,我有一个线性布局列表项,并希望TextView itemName填充行上剩余的空白区域,而其他两个视图(itemIcon和itemTimestamp)只占用他们需要的空间,因此使用了wrap_content。
我在ItemName android:layout_width上尝试了fill_parent和match_parent,但它最终隐藏了itemTimestamp视图。 我尝试过RelativeLayout但没有运气,如果可能的话,我更愿意坚持使用Linearlayout。
感谢您的帮助。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | <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> |
如果要使用LinearLayout,可以使用LinearLayout中的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | <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元素向左推,留下一个空的空格。
这里没有理由使用RelativeLayout。您需要使用的是布局权重。您需要将layout_width设置为0dp,将layout-weight设置为1
这是更新的布局(顺便说一句,我删除了父RelativeLayout,因为它没有任何用处):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | <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" /> |
您可以直接使用RelativeLayout来实现您想要的效果。答案已经在这里如何使用View填充剩余空间?
如果您仍想使用LinearLayout,那么这也是可能的。在这种情况下,要实现您想要的,请将要将内容包装为0的小部件的layout_weight属性设置为(您仍应将它们设置为wrap_content),然后设置要占用剩余部分的小部件的layout_weight空间到1。