LinearLayout 在 RelativeLayout 内的高度为 0

Posted

技术标签:

【中文标题】LinearLayout 在 RelativeLayout 内的高度为 0【英文标题】:LinearLayout have height 0 inside RelativeLayout 【发布时间】:2017-10-14 00:23:30 【问题描述】:

我有 RecyclerView 的项目

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_marginLeft="@dimen/default_padding"
    android:layout_marginRight="@dimen/default_padding"
    android:layout_
    android:layout_>

    <RelativeLayout
        android:id="@+id/item_layout"
        android:layout_
        android:layout_>

        <LinearLayout
            android:id="@+id/deviders_layout"
            android:orientation="vertical"
            android:layout_
            android:layout_
            android:layout_centerInParent="true">

            <View
                android:layout_weight="1"
                android:background="@color/divider"
                android:layout_marginLeft="@dimen/bonus_circle_line_padding"
                android:layout_
                android:layout_
                android:id="@+id/devider_top" />

            <View
                android:layout_weight="1"
                android:background="@color/divider"
                android:layout_marginLeft="@dimen/bonus_circle_line_padding"
                android:layout_
                android:layout_
                android:id="@+id/devider_bottom" />

        </LinearLayout>

        <RelativeLayout
            android:paddingTop="5dp"
            android:paddingBottom="5dp"
            android:layout_centerInParent="true"
            android:layout_
            android:layout_>

            <bank.ui.view.FlexibleСircleText
                android:id="@+id/value_text"
                android:layout_
                android:layout_/>

            <LinearLayout
                android:orientation="vertical"
                android:layout_marginLeft="@dimen/default_padding"
                android:layout_marginRight="@dimen/default_padding"
                android:layout_
                android:minHeight="@dimen/bonus_circle_text_max_diameter"
                android:layout_
                android:layout_alignParentTop="true"
                android:layout_toRightOf="@+id/value_text"
                android:layout_toEndOf="@+id/value_text"
                android:id="@+id/linearLayout2">

                <TextView
                    android:textSize="@dimen/font_size_standard"
                    android:text="text"
                    android:id="@+id/text"
                    android:layout_marginBottom="2dp"
                    android:gravity="bottom"
                    android:layout_weight="1"
                    android:layout_
                    android:layout_ />

                <TextView
                    android:textColor="@color/text_grey"
                    android:textSize="@dimen/font_size_small"
                    android:text="text"
                    android:id="@+id/amount"
                    android:layout_marginTop="2dp"
                    android:gravity="top"
                    android:layout_weight="1"
                    android:ellipsize="end"
                    android:layout_
                    android:layout_ />

            </LinearLayout>

        </RelativeLayout>

    </RelativeLayout>

</LinearLayout>

项目的所有元素都具有正常大小,但 id 为“deviders_layout”大小的布局始终具有高度 = 0;

我尝试添加

android:layout_alignParentBottom="true"
android:layout_alignParentTop="true"

使用 id "deviders_layout" 进行布局。这对我不起作用。

设计

【问题讨论】:

你能添加你想要的设计吗? @vivekmahajan 添加在描述中 【参考方案1】:

RelativeLayout id item_layout 的高度设置为 wrap_content,它有 2 个子布局:

高度设置为wrap_contentRelativeLayout 和高度非空的内容

ID 为deviders_layoutLinearLayout 的高度设置为match_parent,内容也设置为match_parent。使用此配置,您的布局将始终是“平面”,您需要为内容指定高度并使用 wrap_content 或将 parents 高度设置为 match_parent

【讨论】:

【参考方案2】:

试试这个:

    <?xml version="1.0" encoding="utf-8"?>
            <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_
                android:layout_
                android:background="#ffffff"
                android:orientation="vertical"
                android:paddingLeft="10dp">

                <TextView
                    android:id="@+id/value_text"
                    android:layout_
                    android:layout_
                    android:gravity="center"
                    android:textSize="16dp"
                    android:background="@drawable/txt_shape_bg"
                    android:padding="10dp"
                    android:text="200" />

                <RelativeLayout
                    android:layout_
                    android:layout_
                    android:layout_below="@+id/value_text"
                    android:layout_marginLeft="20dp"
                    android:layout_marginTop="0.5dp"
                    android:background="@color/play_game_controls_background_color"
                    android:paddingLeft="1dp">

                    <LinearLayout
                        android:id="@+id/linearLayout2"
                        android:layout_
                        android:layout_
                        android:layout_alignParentTop="true"
                        android:background="#ffffff"
                        android:orientation="vertical"
                        android:paddingBottom="10dp"
                        android:paddingLeft="10dp">

                        <TextView
                            android:id="@+id/text"
                            android:layout_
                            android:layout_
                            android:layout_marginBottom="2dp"
                            android:layout_weight="1"
                            android:gravity="bottom"
                            android:text="This is Base text"
                            android:textSize="18sp" />

                        <TextView
                            android:id="@+id/amount"
                            android:layout_
                            android:layout_
                            android:layout_marginTop="2dp"
                            android:layout_weight="1"
                            android:ellipsize="end"
                            android:gravity="top"
                            android:text="200 Childs "
                            android:textColor="@color/pink"
                            android:textSize="14sp" />
                    </LinearLayout>

                </RelativeLayout>

            </RelativeLayout>

文本视图的背景 xml 形状:

       <?xml version="1.0" encoding="utf-8"?>
            <shape xmlns:android="http://schemas.android.com/apk/res/android"
                android:shape="oval">
                <corners android:radius="10dip"/>
                <stroke android:color="#FF0000" android:/>
                <solid android:color="#FF0000"/>
            </shape>

【讨论】:

以上是关于LinearLayout 在 RelativeLayout 内的高度为 0的主要内容,如果未能解决你的问题,请参考以下文章

Android:如何让LinearLayout的background在整个屏幕中心显示

在 LinearLayout 中获取所有子项

LinearLayout 忽略边距

在 LinearLayout 中更改 LayoutParams 的动画

安卓linearLayout动态添加控件

在 LinearLayout 中获取视图的索引