使子ViewGroup与父高度RecyclerView匹配

时间:2016-07-19 17:21:22

标签: android android-recyclerview

我正在尝试创建一个RecyclerView项目布局,其中子视图组应该匹配项目的高度,例如,我有一个250dp的高度项目,我有一个LinearLayout,其高度设置为match_parent它的高度也应该是250dp。

当我尝试这样做时似乎并非如此,LinearLayout高度似乎被强制为wrap_content

这是我用来测试

的示例布局
<?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">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="250dp"
            android:layout_toLeftOf="@+id/ll"
            android:background="@color/android_green">

        </RelativeLayout>

        <LinearLayout
            android:layout_width="175dp"
            android:layout_height="match_parent"
            android:orientation="horizontal"
            android:id="@+id/ll"
            android:layout_alignParentRight="true"
            android:background="@color/android_red">

        </LinearLayout>
    </RelativeLayout>
</RelativeLayout>

当我设置硬高度(250dp)时,我只看到LinearLayout,如果我将其更改为match_parent则会消失。

使用RecyclerView不再可能吗?

3 个答案:

答案 0 :(得分:0)

你说你期望它是250dp对吗?事实是,您的LinearLayout位于辅助(第二个订单)RelativeLayout内。设置match_parent将使其从那里复制高度,而不是具有HardCoded 250dp的3rd Order RelativeLayout。

我建议保留它并在你的java中扩展它,这样你的应用程序就可以在所有设备上运行...... HardCoding数字并不是最好的事情......但是,如果你 DO 需要它正好是250dp,使LinearLayout成为3阶RealativeLayout的子项。

<?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">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="250dp"
            android:layout_toLeftOf="@+id/ll"
            android:background="@color/android_green">

            <LinearLayout
                android:layout_width="175dp"
                android:layout_height="match_parent"
                android:orientation="horizontal"
                android:id="@+id/ll"
                android:layout_alignParentRight="true"
                android:background="@color/android_red">
            </LinearLayout>

        </RelativeLayout>
    </RelativeLayout>
</RelativeLayout>

<强>更新

我完全同意Mike M.关于删除二阶亲戚关系的评论。它没有任何明显的目的(至少不在提供的代码中)并且无用地使您的程序复杂化。如果您确实需要它,可以尝试寻找不那么混乱的替代布局。

答案 1 :(得分:0)

你能解释一下你面临的问题吗?如果您遇到以下问题,请按以下方式更改为。

请更改您的父布局(LinearLayout&#39; s),即相对布局高度为250dp,现在为match_parent,因此您将获得两个布局大小相同的250dp。 这里下面放了改变的代码,你的意图就是这样,然后把它改成

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="250dp">
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_toLeftOf="@+id/ll"
        android:background="@color/color_dark_yellow">

    </RelativeLayout>

    <LinearLayout
        android:layout_width="175dp"
        android:layout_height="fill_parent"
        android:orientation="horizontal"
        android:id="@+id/ll"
        android:layout_alignParentRight="true"
        android:background="@color/color_green_txt">

    </LinearLayout>
</RelativeLayout>

答案 2 :(得分:0)

使用以下方法使子视图组匹配父高:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <RelativeLayout

        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <RelativeLayout
            android:id="@+id/rl_child"
            android:layout_width="match_parent"
            android:layout_height="250dp"
            android:layout_toLeftOf="@+id/ll"
            android:background="#00FF00">

        </RelativeLayout>

        <RelativeLayout
            android:id="@+id/ll"
            android:layout_width="175dp"
            android:layout_height="match_parent"
            android:layout_alignBottom="@+id/rl_child"
            android:layout_alignParentRight="true"
            android:background="#FF0000"
            android:orientation="horizontal">

        </RelativeLayout>
    </RelativeLayout>
</RelativeLayout>