Android TextView不会扩展为与父级匹配

时间:2015-04-13 10:24:23

标签: android textview android-layout-weight

我有一个像这个图像的视图组:

enter image description here

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

任何想法都会受到赞赏。感谢。

<?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无效但没有任何改变。当我有笔记时,结果是这样的。

enter image description here

4 个答案:

答案 0 :(得分:1)

您的android:padding="8dp"正在制作此作品。

如果您想在顶部底部上填充,请使用

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

答案 1 :(得分:0)

如果我理解正确,您希望在没有提示和促销时完全删除提示和促销字段,并显示红色备注部分以匹配父级。

在哪种情况下制作LinearLayout llTipsPromos gone。这将使父母填充红色笔记部分

答案 2 :(得分:0)

尝试以下代码 -

<?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一定会为您效劳。

答案 3 :(得分:0)

最后,我找到了解决问题的方法。这是改变。 如果您遇到类似的问题,希望会帮助您。

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