Android 匹配父级内部包装内容不匹配';我不能在api 18上工作
我有一个RelativeLayout,它不占据整个屏幕,拥有两个子视图。两个孩子都是线性布局,第二个孩子的身高取决于第一个孩子Android 匹配父级内部包装内容不匹配';我不能在api 18上工作,android,xml,android-layout,parent-child,android-relativelayout,Android,Xml,Android Layout,Parent Child,Android Relativelayout,我有一个RelativeLayout,它不占据整个屏幕,拥有两个子视图。两个孩子都是线性布局,第二个孩子的身高取决于第一个孩子 <TextView android:id="@+id/lastTime" android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingBo
<TextView
android:id="@+id/lastTime"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="2dp"
android:paddingLeft="30dp"
android:paddingTop="15dp"
android:textColor="@android:color/white"
android:textStyle="bold"/>
<TextView
android:id="@+id/lastAuthor"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="15dp"
android:paddingLeft="30dp"
android:textColor="@android:color/white"/>
</LinearLayout>
<!-- images -->
<ImageView
android:id="@+id/hide"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignBottom="@+id/childTWrapper"
android:layout_alignTop="@+id/childTWrapper"
android:layout_toRightOf="@id/childTWrapper"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:paddingLeft="12dp"
android:paddingRight="12dp"
android:src="@drawable/ic_hide"/>
<ImageView
android:id="@+id/profile"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignBottom="@+id/childTWrapper"
android:layout_alignTop="@+id/childTWrapper"
android:layout_toRightOf="@id/hide"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:paddingLeft="12dp"
android:paddingRight="12dp"
android:src="@drawable/ic_profile"/>
<ImageView
android:id="@+id/browser"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignBottom="@+id/childTWrapper"
android:layout_alignTop="@+id/childTWrapper"
android:layout_toRightOf="@id/profile"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:paddingLeft="12dp"
android:paddingRight="12dp"
android:src="@drawable/ic_browser"/>
</RelativeLayout>
我遵循了这一点,并对其进行了修改以生成以下XML:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/parentWrapper"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#232323"
android:orientation="horizontal">
<!-- 1st child -->
<LinearLayout
android:id="@+id/childTWrapper"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_toLeftOf="@+id/iconWrapper"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:orientation="vertical">
<TextView
android:id="@+id/lastTime"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="2dp"
android:paddingLeft="30dp"
android:paddingTop="15dp"
android:textColor="@android:color/white"
android:textStyle="bold"/>
<TextView
android:id="@+id/lastAuthor"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="15dp"
android:paddingLeft="30dp"
android:textColor="@android:color/white"/>
</LinearLayout>
<!-- 2nd child; matches height of first child -->
<LinearLayout
android:id="@+id/iconWrapper"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/childTWrapper"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_centerVertical="true"
android:orientation="horizontal"
android:paddingRight="18dp">
<!-- images -->
<ImageView
android:id="@+id/hide"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:paddingLeft="12dp"
android:paddingRight="12dp"
android:src="@drawable/ic_hide"/>
<ImageView
android:id="@+id/profile"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:paddingLeft="12dp"
android:paddingRight="12dp"
android:src="@drawable/ic_profile"/>
<ImageView
android:id="@+id/browser"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:paddingLeft="12dp"
android:paddingRight="12dp"
android:src="@drawable/ic_browser"/>
</LinearLayout>
</RelativeLayout>
<TextView
android:id="@+id/lastTime"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="2dp"
android:paddingLeft="30dp"
android:paddingTop="15dp"
android:textColor="@android:color/white"
android:textStyle="bold"/>
<TextView
android:id="@+id/lastAuthor"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="15dp"
android:paddingLeft="30dp"
android:textColor="@android:color/white"/>
</LinearLayout>
<!-- images -->
<ImageView
android:id="@+id/hide"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignBottom="@+id/childTWrapper"
android:layout_alignTop="@+id/childTWrapper"
android:layout_toRightOf="@id/childTWrapper"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:paddingLeft="12dp"
android:paddingRight="12dp"
android:src="@drawable/ic_hide"/>
<ImageView
android:id="@+id/profile"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignBottom="@+id/childTWrapper"
android:layout_alignTop="@+id/childTWrapper"
android:layout_toRightOf="@id/hide"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:paddingLeft="12dp"
android:paddingRight="12dp"
android:src="@drawable/ic_profile"/>
<ImageView
android:id="@+id/browser"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignBottom="@+id/childTWrapper"
android:layout_alignTop="@+id/childTWrapper"
android:layout_toRightOf="@id/profile"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:paddingLeft="12dp"
android:paddingRight="12dp"
android:src="@drawable/ic_browser"/>
</RelativeLayout>
现在,问题是我希望第二线性布局的子对象(ImageView)与其父对象的高度相匹配。这将导致match_parent
视图嵌套在wrap_content
视图中。即使我将LinearLayout的高度更改为match\u parent
,它最终仍然位于高度wrap\u content
的RelativeLayout内
<TextView
android:id="@+id/lastTime"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="2dp"
android:paddingLeft="30dp"
android:paddingTop="15dp"
android:textColor="@android:color/white"
android:textStyle="bold"/>
<TextView
android:id="@+id/lastAuthor"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="15dp"
android:paddingLeft="30dp"
android:textColor="@android:color/white"/>
</LinearLayout>
<!-- images -->
<ImageView
android:id="@+id/hide"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignBottom="@+id/childTWrapper"
android:layout_alignTop="@+id/childTWrapper"
android:layout_toRightOf="@id/childTWrapper"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:paddingLeft="12dp"
android:paddingRight="12dp"
android:src="@drawable/ic_hide"/>
<ImageView
android:id="@+id/profile"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignBottom="@+id/childTWrapper"
android:layout_alignTop="@+id/childTWrapper"
android:layout_toRightOf="@id/hide"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:paddingLeft="12dp"
android:paddingRight="12dp"
android:src="@drawable/ic_profile"/>
<ImageView
android:id="@+id/browser"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignBottom="@+id/childTWrapper"
android:layout_alignTop="@+id/childTWrapper"
android:layout_toRightOf="@id/profile"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:paddingLeft="12dp"
android:paddingRight="12dp"
android:src="@drawable/ic_browser"/>
</RelativeLayout>
在API>18的情况下,这可以正常工作:
<TextView
android:id="@+id/lastTime"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="2dp"
android:paddingLeft="30dp"
android:paddingTop="15dp"
android:textColor="@android:color/white"
android:textStyle="bold"/>
<TextView
android:id="@+id/lastAuthor"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="15dp"
android:paddingLeft="30dp"
android:textColor="@android:color/white"/>
</LinearLayout>
<!-- images -->
<ImageView
android:id="@+id/hide"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignBottom="@+id/childTWrapper"
android:layout_alignTop="@+id/childTWrapper"
android:layout_toRightOf="@id/childTWrapper"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:paddingLeft="12dp"
android:paddingRight="12dp"
android:src="@drawable/ic_hide"/>
<ImageView
android:id="@+id/profile"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignBottom="@+id/childTWrapper"
android:layout_alignTop="@+id/childTWrapper"
android:layout_toRightOf="@id/hide"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:paddingLeft="12dp"
android:paddingRight="12dp"
android:src="@drawable/ic_profile"/>
<ImageView
android:id="@+id/browser"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignBottom="@+id/childTWrapper"
android:layout_alignTop="@+id/childTWrapper"
android:layout_toRightOf="@id/profile"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:paddingLeft="12dp"
android:paddingRight="12dp"
android:src="@drawable/ic_browser"/>
</RelativeLayout>
在API上,将布局的高度设置为与父级匹配,将宽度设置为包裹内容并设置android:layout\u gravity=“center\u vertical”和android:gravity=“center\u vertical”我还没有测试过这一点,但我注意到一些可能导致问题的东西。。尝试这些更改,看看它是如何工作的。我添加了一些注释,试图解释我的更改
<?xml version="1.0" encoding="utf-8"?>
<!-- Relative layout doesn't use the orientation attribute so I nixed that -->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/parentWrapper"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#232323">
<!-- 1st child -->
<LinearLayout
android:id="@+id/childTWrapper"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_toLeftOf="@+id/iconWrapper"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:orientation="vertical">
<TextView
android:id="@+id/lastTime"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="2dp"
android:paddingLeft="30dp"
android:paddingTop="15dp"
android:textColor="@android:color/white"
android:textStyle="bold"/>
<TextView
android:id="@+id/lastAuthor"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="15dp"
android:paddingLeft="30dp"
android:textColor="@android:color/white"/>
</LinearLayout>
<!-- 2nd child; matches height of first child -->
<!-- Set the top AND bottom of this linear layout to be aligned with the first child, rather than aligning it to the top of the parent. You also probably don't want the centerVertical attribute because that centers the LinearLayout and not it's children. -->
<LinearLayout
android:id="@+id/iconWrapper"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/childTWrapper"
android:layout_alignTop="@+id/childTWrapper"
android:layout_alignParentRight="true"
android:orientation="horizontal"
android:paddingRight="18dp">
<!-- images -->
<ImageView
android:id="@+id/hide"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:paddingLeft="12dp"
android:paddingRight="12dp"
android:src="@drawable/ic_hide"/>
<ImageView
android:id="@+id/profile"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:paddingLeft="12dp"
android:paddingRight="12dp"
android:src="@drawable/ic_profile"/>
<ImageView
android:id="@+id/browser"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:paddingLeft="12dp"
android:paddingRight="12dp"
android:src="@drawable/ic_browser"/>
</LinearLayout>
</RelativeLayout>
<TextView
android:id="@+id/lastTime"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="2dp"
android:paddingLeft="30dp"
android:paddingTop="15dp"
android:textColor="@android:color/white"
android:textStyle="bold"/>
<TextView
android:id="@+id/lastAuthor"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="15dp"
android:paddingLeft="30dp"
android:textColor="@android:color/white"/>
</LinearLayout>
<!-- images -->
<ImageView
android:id="@+id/hide"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignBottom="@+id/childTWrapper"
android:layout_alignTop="@+id/childTWrapper"
android:layout_toRightOf="@id/childTWrapper"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:paddingLeft="12dp"
android:paddingRight="12dp"
android:src="@drawable/ic_hide"/>
<ImageView
android:id="@+id/profile"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignBottom="@+id/childTWrapper"
android:layout_alignTop="@+id/childTWrapper"
android:layout_toRightOf="@id/hide"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:paddingLeft="12dp"
android:paddingRight="12dp"
android:src="@drawable/ic_profile"/>
<ImageView
android:id="@+id/browser"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignBottom="@+id/childTWrapper"
android:layout_alignTop="@+id/childTWrapper"
android:layout_toRightOf="@id/profile"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:paddingLeft="12dp"
android:paddingRight="12dp"
android:src="@drawable/ic_browser"/>
</RelativeLayout>
如果这不起作用,或者如果要删除不必要的第二个LinearLayout,可以将每个ImageView元素与第一个子元素对齐。。。看起来是这样的:
<TextView
android:id="@+id/lastTime"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="2dp"
android:paddingLeft="30dp"
android:paddingTop="15dp"
android:textColor="@android:color/white"
android:textStyle="bold"/>
<TextView
android:id="@+id/lastAuthor"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="15dp"
android:paddingLeft="30dp"
android:textColor="@android:color/white"/>
</LinearLayout>
<!-- images -->
<ImageView
android:id="@+id/hide"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignBottom="@+id/childTWrapper"
android:layout_alignTop="@+id/childTWrapper"
android:layout_toRightOf="@id/childTWrapper"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:paddingLeft="12dp"
android:paddingRight="12dp"
android:src="@drawable/ic_hide"/>
<ImageView
android:id="@+id/profile"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignBottom="@+id/childTWrapper"
android:layout_alignTop="@+id/childTWrapper"
android:layout_toRightOf="@id/hide"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:paddingLeft="12dp"
android:paddingRight="12dp"
android:src="@drawable/ic_profile"/>
<ImageView
android:id="@+id/browser"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignBottom="@+id/childTWrapper"
android:layout_alignTop="@+id/childTWrapper"
android:layout_toRightOf="@id/profile"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:paddingLeft="12dp"
android:paddingRight="12dp"
android:src="@drawable/ic_browser"/>
</RelativeLayout>
您还可以进一步删除另一个LinearLayout,但我将把它作为一个练习留给任何想尝试的人:-),因为“在包装内容中匹配父项”根本没有意义。(您有循环引用)@Selvin是的,但是如何填充非全屏视图的高度呢?如果您将第一个LinearLayout的高度设置为与父级匹配,元素将占据整个屏幕,我不希望这样。父级的布局高度设置为“包裹内容”。
<TextView
android:id="@+id/lastTime"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="2dp"
android:paddingLeft="30dp"
android:paddingTop="15dp"
android:textColor="@android:color/white"
android:textStyle="bold"/>
<TextView
android:id="@+id/lastAuthor"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="15dp"
android:paddingLeft="30dp"
android:textColor="@android:color/white"/>
</LinearLayout>
<!-- images -->
<ImageView
android:id="@+id/hide"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignBottom="@+id/childTWrapper"
android:layout_alignTop="@+id/childTWrapper"
android:layout_toRightOf="@id/childTWrapper"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:paddingLeft="12dp"
android:paddingRight="12dp"
android:src="@drawable/ic_hide"/>
<ImageView
android:id="@+id/profile"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignBottom="@+id/childTWrapper"
android:layout_alignTop="@+id/childTWrapper"
android:layout_toRightOf="@id/hide"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:paddingLeft="12dp"
android:paddingRight="12dp"
android:src="@drawable/ic_profile"/>
<ImageView
android:id="@+id/browser"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignBottom="@+id/childTWrapper"
android:layout_alignTop="@+id/childTWrapper"
android:layout_toRightOf="@id/profile"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:paddingLeft="12dp"
android:paddingRight="12dp"
android:src="@drawable/ic_browser"/>
</RelativeLayout>