【问题标题】:Android TextView does not expand to match parentAndroid TextView 不扩展以匹配父级
【发布时间】:2020-09-04 07:07:09
【问题描述】:

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

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

任何想法将不胜感激。谢谢。

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

【问题讨论】:

  • 我认为你应该让整个布局的可见性消失。我的意思是 id 为“llTipsPromos”的布局。
  • @Blackbelt 这只是填充。我刚刚删除了它,尽管它看起来像上图,没有在 textViews 周围填充。
  • 删除此(llTipsPromos) LinearLayout 块中的 layout_weight。否则它不会采用其他属性,对于空数据也将宽度作为永久属性。

标签: android textview android-layout-weight


【解决方案1】:

你的android:padding="8dp" 正在制作这个。

如果您只想在 topbottom 上设置内边距,请使用

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      试试下面的代码 -

      <?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。它肯定适合您。

      【讨论】:

      • 谢谢。虽然我还没有找到我的问题,但你的解决方案有效。
      • 抱歉不接受您的回答,因为经过测试发现问题逆转了。注意现在可以正确展开,但提示和促销没有展开:(
      • 您找到解决问题的方法了吗?
      • 抱歉回复晚了。请看看我的回答。 stackoverflow.com/a/30051113/513413
      【解决方案4】:

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

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

      【讨论】:

      • 你改变了什么?请提供详细信息
      猜你喜欢
      • 2014-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多