Android TextView 未扩展以匹配父级

Android TextView does not expand to match parent

我有一个类似这张图片的视图组:

我不想显示那些空白的文本。例如,假设我没有提示和促销,那么应该只显示注释。当我测试我的程序时,注释(显示为红色背景)不会扩展以填充父级,尽管其宽度设置为与父级匹配。

如有任何想法,我们将不胜感激。谢谢。

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/llNotesContainer"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/tracking_bg_note"
    android:orientation="horizontal">

    <LinearLayout
        android:id="@+id/llNotes"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:orientation="vertical"
        android:padding="8dp">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/tracking_notes"
            android:textColor="@color/tracking_font_address"
            android:textSize="13sp"/>

        <TextView
            android:id="@+id/tvNotes"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:maxLines="2"
            android:ellipsize="end"
            android:textColor="@color/tracking_font_note"
            android:textSize="15sp"
            android:background="@color/red"/>
    </LinearLayout>

    <View
        android:id="@+id/vVerticalSeparator"
        android:layout_width="1dp"
        android:layout_height="match_parent"
        android:layout_marginBottom="8dp"
        android:layout_marginTop="8dp"
        android:background="@color/tracking_separator"/>

    <!-- Tips and Promos -->
    <LinearLayout
        android:id="@+id/llTipsPromos"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:orientation="vertical"
        android:gravity="center_vertical">

        <LinearLayout
            android:id="@+id/llTips"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:gravity="center_vertical"
            android:padding="8dp">

            <TextView
                android:layout_width="50dp"
                android:layout_height="wrap_content"
                android:text="@string/tracking_tips"
                android:textColor="@color/tracking_font_address"
                android:textSize="13sp"/>

            <TextView
                android:id="@+id/tvTips"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:textColor="@color/tracking_font_note"
                android:textSize="15sp"
                android:singleLine="true"
                android:ellipsize="end"/>
        </LinearLayout>

        <View
            android:id="@+id/vHorizontalSeparator"
            android:layout_width="match_parent"
            android:layout_height="1dp"
            android:background="@color/tracking_separator"/>

        <LinearLayout
            android:id="@+id/llPromos"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:gravity="center_vertical"
            android:padding="8dp">

            <TextView
                android:layout_width="50dp"
                android:layout_height="wrap_content"
                android:text="@string/tracking_promo"
                android:textColor="@color/tracking_font_address"
                android:textSize="13sp"/>

            <TextView
                android:id="@+id/tvPromos"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:textColor="@color/tracking_font_note"
                android:textSize="15sp"
                android:singleLine="true"
                android:ellipsize="end"/>
        </LinearLayout>
    </LinearLayout>
</LinearLayout>

在代码中,我有一个方法可以在我想更新时调用 UI。方法是:

private void showHideSeparators()
    {
        boolean notes = false;
        boolean tips = false;
        boolean promos = false;

        if (!TextUtils.isEmpty(this.tvNotes.getText()))
        {
            notes = true;
        }

        if (!TextUtils.isEmpty(this.tvTips.getText()))
        {
            tips = true;
        }

        if (!TextUtils.isEmpty(this.tvPromos.getText()))
        {
            promos = true;
        }

        // We need to consider 8 configurations due to 3 variables
        if (!notes && !tips && !promos)
        {
            this.llNotesContainer.setVisibility(View.GONE);
            return;
        }

        if (!notes && !tips && promos)
        {
            this.llNotesToDriver.setVisibility(View.GONE);
            this.llTips.setVisibility(View.GONE);
            this.vVerticalSeparator.setVisibility(View.GONE);
            this.vHorizontalSeparator.setVisibility(View.GONE);
            return;
        }

        if (!notes && tips && !promos)
        {
            this.llNotesToDriver.setVisibility(View.GONE);
            this.llPromos.setVisibility(View.GONE);
            this.vVerticalSeparator.setVisibility(View.GONE);
            this.vHorizontalSeparator.setVisibility(View.GONE);
            return;
        }

        if (!notes && tips && promos)
        {
            this.llNotesToDriver.setVisibility(View.GONE);
            this.vVerticalSeparator.setVisibility(View.GONE);
            return;
        }

        if (notes && !tips && !promos)
        {
            this.llTips.setVisibility(View.GONE);
            this.llPromos.setVisibility(View.GONE);
            this.vVerticalSeparator.setVisibility(View.GONE);
            this.vHorizontalSeparator.setVisibility(View.GONE);
            return;
        }

        if (notes && !tips && promos)
        {
            this.llTips.setVisibility(View.GONE);
            this.vVerticalSeparator.setVisibility(View.GONE);
            return;
        }

        if (notes && tips && !promos)
        {
            this.llPromos.setVisibility(View.GONE);
            this.vHorizontalSeparator.setVisibility(View.GONE);
            return;
        }

        // this is default situation when all is true
        if (notes && tips && promos)
        {
            return;
        }
    }

我什至试图使我的 textView 无效,但没有任何改变。当我只有笔记时,结果是这样的。

你的 android:padding="8dp" 做到了。

如果您只想在 topbottom 上填充,请使用

android:paddingBottom="8dp"
android:paddingTop="8dp"

如果我理解正确的话,你想在没有提示和促销时完全删除提示和促销字段,并显示红色注释部分以匹配父项。

在这种情况下使 LinearLayout llTipsPromos gone。这将用红色注释部分填充父级

试试下面的代码 -

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/llNotesContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/tracking_bg_note">

<LinearLayout
    android:id="@+id/llNotes"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_toLeftOf="@+id/llTipsPromos"
    android:layout_alignParentLeft="true"
    android:orientation="vertical"
    android:padding="8dp" >

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/tracking_notes"
        android:textColor="@color/tracking_font_address"
        android:textSize="13sp"/>

    <TextView
        android:id="@+id/tvNotes"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:maxLines="2"
        android:ellipsize="end"
        android:textColor="@color/tracking_font_note"
        android:textSize="15sp"
        android:background="@color/red"/>
</LinearLayout>

 <View
    android:id="@+id/vVerticalSeparator"
    android:layout_toRightOf="@+id/llNotes"
    android:layout_width="1dp"
    android:layout_height="match_parent"
    android:layout_marginBottom="8dp"
    android:layout_marginTop="8dp"
    android:background="@color/tracking_separator"/>

Tips and Promos
<LinearLayout
    android:id="@+id/llTipsPromos"
    android:layout_width="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:orientation="vertical"
    android:gravity="center_vertical">

    <LinearLayout
        android:id="@+id/llTips"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:visibility="visible"
        android:gravity="center_vertical"
        android:padding="8dp">

        <TextView
            android:layout_width="50dp"
            android:layout_height="wrap_content"
            android:text="@string/tracking_tips"
            android:textColor="@color/tracking_font_address"
            android:textSize="13sp"/>

        <TextView
            android:id="@+id/tvTips"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textColor="@color/tracking_font_note"
            android:textSize="15sp"
            android:singleLine="true"
            android:ellipsize="end"/>
    </LinearLayout>

    <View
        android:id="@+id/vHorizontalSeparator"
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="@color/tracking_separator"/>

    <LinearLayout
        android:id="@+id/llPromos"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:visibility="visible"
        android:orientation="horizontal"
        android:gravity="center_vertical"
        android:padding="8dp">

        <TextView
            android:layout_width="50dp"
            android:layout_height="wrap_content"
            android:text="@string/tracking_promo"
            android:textColor="@color/tracking_font_address"
            android:textSize="13sp"/>

        <TextView
            android:id="@+id/tvPromos"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textColor="@color/tracking_font_note"
            android:textSize="15sp"
            android:singleLine="true"
            android:ellipsize="end"/>
    </LinearLayout>
</LinearLayout> 

如果您想全屏显示笔记视图,然后隐藏您的 llTipsPromos LinearLayout.It 一定会适合您。

我终于找到了解决问题的方法。这是变化:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/llNotesContainer"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/tracking_bg_note"
    android:orientation="horizontal">

    <LinearLayout
        android:id="@+id/llNotes"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:orientation="vertical"
        android:padding="8dp">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/tracking_notes"
            android:textColor="@color/tracking_font_address"
            android:textSize="13sp"/>

        <TextView
            android:id="@+id/tvNotes"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textColor="@color/tracking_font_note"
            android:textSize="15sp"
            android:background="@color/red"/>
    </LinearLayout>

    <View
        android:id="@+id/vVerticalSeparator"
        android:layout_width="1dp"
        android:layout_height="match_parent"
        android:layout_marginBottom="8dp"
        android:layout_marginTop="8dp"
        android:background="@color/tracking_separator"/>

    <!-- Tips and Promos -->
    <LinearLayout
        android:id="@+id/llTipsPromos"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:gravity="center_vertical">

        <LinearLayout
            android:id="@+id/llTips"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:gravity="center_vertical"
            android:padding="8dp">

            <TextView
                android:layout_width="50dp"
                android:layout_height="wrap_content"
                android:text="@string/tracking_tips"
                android:textColor="@color/tracking_font_address"
                android:textSize="13sp"/>

            <TextView
                android:id="@+id/tvTips"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:textColor="@color/tracking_font_note"
                android:textSize="15sp"/>
        </LinearLayout>

        <View
            android:id="@+id/vHorizontalSeparator"
            android:layout_width="match_parent"
            android:layout_height="1dp"
            android:background="@color/tracking_separator"/>

        <LinearLayout
            android:id="@+id/llPromos"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:gravity="center_vertical"
            android:padding="8dp">

            <TextView
                android:layout_width="50dp"
                android:layout_height="wrap_content"
                android:text="@string/tracking_promo"
                android:textColor="@color/tracking_font_address"
                android:textSize="13sp"/>

            <TextView
                android:id="@+id/tvPromos"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:textColor="@color/tracking_font_note"
                android:textSize="15sp"/>
        </LinearLayout>
    </LinearLayout>
</LinearLayout>