我尝试为列表项目制作布局,左侧是图像,两行是文本,右侧是三个小方块,用于弹出菜单。
我尝试使用LinearLayout
和RelativeLayout
,但ImageButton
元素始终不可见。预览显示宽度为0.我不知道该怎么做,即使将layout_width
和minWidth
设置为某个值也没有做任何事情。
以下是元素的XML:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="right"
android:minHeight="?android:attr/listPreferredItemHeight"
android:paddingStart="?android:attr/listPreferredItemPaddingStart"
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd">
<ImageView
android:contentDescription="@string/content_description_collection_logo"
android:id="@android:id/icon"
android:layout_marginTop="8dip"
android:src="@drawable/ic_launcher"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<RelativeLayout
android:id="@+id/text_layout"
android:layout_toRightOf="@android:id/icon"
android:layout_marginTop="8dip"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:id="@android:id/text1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge" />
<TextView
android:id="@android:id/text2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@android:id/text1"
android:layout_alignStart="@android:id/text1"
android:layout_marginTop="5dip"
android:textAppearance="?android:attr/textAppearanceSmall" />
</RelativeLayout>
<ImageButton
android:id="@+id/popup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/text_layout"
android:src="@drawable/ic_action_overflow"
android:contentDescription="@string/content_description_overflow_button"
android:layout_alignBottom="@android:id/icon"
android:layout_above="@+id/text_layout"
android:minWidth="1dp" />
</RelativeLayout>
我认为将minWidth
设置为1dp
可以在这方面提供帮助,但遗憾的是没有。 Drawable存在并且是32x32像素png。
答案 0 :(得分:1)
这种布局有几个问题:
对于您的情况,使用两个嵌套的LinearLayouts或一个RelativeLayout是有意义的。 RelativeLayouts有时可以替换嵌套的LinearLayouts,但我只使用它们可以减少ViewGroups的数量,因为它可能很难配置&#34;配置&#34;它们是正确的(对齐,填充整个宽度......)。
在你的情况下,我选择了LinearLayout方法,因为很难将ImageButton放在两个TextView的右边而不添加额外的容器视图(正如你所做的那样):
<?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="wrap_content"
android:orientation="horizontal"
android:gravity="left|center_vertical"
android:minHeight="?android:attr/listPreferredItemHeight"
android:paddingStart="?android:attr/listPreferredItemPaddingStart"
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd">
<ImageView
android:contentDescription="@string/content_description_collection_logo"
android:id="@android:id/icon"
android:layout_marginTop="8dip"
android:src="@drawable/ic_launcher"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<LinearLayout
android:layout_marginTop="8dip"
android:layout_weight="1"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:id="@android:id/text1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge" />
<TextView
android:id="@android:id/text2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@android:id/text1"
android:layout_marginTop="5dip"
android:textAppearance="?android:attr/textAppearanceSmall" />
</LinearLayout>
<ImageButton
android:id="@+id/popup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_action_overflow"
android:contentDescription="@string/content_description_overflow_button"
android:minWidth="1dp" />
</LinearLayout>
答案 1 :(得分:0)
尝试在你的ImageButton上将attr android:layout_above更改为android:layout_below:
<ImageButton
android:id="@+id/popup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/text_layout"
android:src="@drawable/ic_action_overflow"
android:contentDescription="@string/content_description_overflow_button"
android:layout_alignBottom="@android:id/icon"
**android:layout_below="@+id/text_layout"**
android:minWidth="1dp" />
我认为这是一个RelativeLayout问题,因为你的text_layout在主视图的顶部对齐,当你把layout_above放在你的ImageButton上面时会放在text_layout上面,换句话说,就会把它放在屏幕外面
答案 2 :(得分:0)
试试这种方式,希望这可以帮助您解决问题。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_vertical"
android:minHeight="?android:attr/listPreferredItemHeight"
android:paddingStart="?android:attr/listPreferredItemPaddingStart"
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
android:padding="5dp">
<ImageView
android:contentDescription="@string/content_description_collection_logo"
android:id="@android:id/icon"
android:src="@drawable/ic_launcher"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<LinearLayout
android:id="@+id/text_layout"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_marginLeft="5dp"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@android:id/text1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge" />
<TextView
android:id="@android:id/text2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:textAppearance="?android:attr/textAppearanceSmall" />
</LinearLayout>
<ImageButton
android:id="@+id/popup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:src="@drawable/ic_action_overflow"
android:contentDescription="@string/content_description_overflow_button"
android:minWidth="1dp" />
</LinearLayout>
答案 3 :(得分:0)
RelativeLayout
解决方案
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?android:attr/listPreferredItemHeight"
android:paddingStart="?android:attr/listPreferredItemPaddingStart"
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd">
<ImageView
android:id="@android:id/icon"
android:layout_marginTop="8dip"
android:src="@drawable/ic_launcher"
android:layout_alignParentLeft="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<ImageButton
android:id="@+id/popup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_action_overflow"
android:contentDescription="@string/content_description_overflow_button"
android:layout_alignParentRight="true"
android:layout_alignBottom="@android:id/icon" />
<RelativeLayout
android:id="@+id/text_layout"
android:layout_toRightOf="@android:id/icon"
android:layout_toLeftOf="@+id/popup"
android:layout_marginTop="8dip"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:id="@android:id/text1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge" />
<TextView
android:id="@android:id/text2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@android:id/text1"
android:layout_alignStart="@android:id/text1"
android:layout_marginTop="5dip"
android:textAppearance="?android:attr/textAppearanceSmall" />
</RelativeLayout>
</RelativeLayout>