布局中的ImageButton始终不可见

时间:2014-06-12 12:39:32

标签: android xml android-layout

我尝试为列表项目制作布局,左侧是图像,两行是文本,右侧是三个小方块,用于弹出菜单。

我尝试使用LinearLayoutRelativeLayout,但ImageButton元素始终不可见。预览显示宽度为0.我不知道该怎么做,即使将layout_widthminWidth设置为某个值也没有做任何事情。

以下是元素的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。

4 个答案:

答案 0 :(得分:1)

这种布局有几个问题:

  • 机器人:取向=&#34;水平&#34;与RelativeLayout
  • 无关
  • 机器人:比重=&#34;右&#34;可能不是你想要的列表条目,应该是左对齐吗?
  • 添加android:layout_alignParentLeft =&#34; true&#34;到ImageView将它锚定到布局的左侧
  • 机器人:layout_above =&#34; @ + ID / text_layout&#34;如果它应该位于两个TextView的右侧,那么在ImageButton中没有意义。

对于您的情况,使用两个嵌套的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>