2015-04-13 4 views
2

У меня есть ViewGroup как это изображение:Android TextView не расширяется, чтобы соответствовать родителю

enter image description here

Я хочу, чтобы не показать те тексты, которые являются пустыми. Например, предположим, что у меня нет подсказок и промо, тогда только заметки должны быть видны. Когда я тестирую свою программу 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> 

В коде у меня есть метод, который вызывает один раз, когда я хочу обновить интерфейс. Метод:

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; 
     } 
    } 

Я даже попытался аннулировать текст, но ничего не изменилось. Результат такой, когда у меня есть только заметки.

enter image description here

+0

Я думаю, вы должны сделать всю видимость макета, чтобы исчезнуть. Я имею в виду макет с id "llTipsPromos". – dora

+0

@Blackbelt это просто обивка. Я просто удалил его, хотя его изображение выглядело как изображение выше, без заполнения текста. – Hesam

+0

удалите layout_weight в этом (llTipsPromos) блоке LinearLayout. В противном случае он не будет принимать другой атрибут, также принимает ширину как постоянную для пустых данных. – PAC

ответ

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> 
+0

Что вы изменили? –

1

Ваш android:padding="8dp" делает это.

Если вы хотите иметь отступы только на верхней и нижней, используйте

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

Если я правильно понимаю, что вы хотите удалить поле советы и PROMOS полностью, когда нет советов и промо, и отобразите раздел красных заметок, чтобы он соответствовал родительскому.

В этом случае введите LinearLayout llTipsPromosgone. Это будет заполнить родителя с нотами секции красной

0

Try ниже код -

<?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 будет уверен работать вы.

+0

Спасибо. Хотя я не нашел, где была моя проблема, но ваше решение работает. – Hesam

+0

Извините, не принят ваш ответ, так как после тестирования выяснилось, что проблема изменилась. Заметка распространяется правильно, но Советы и Промоушен не расширяются :( – Hesam

+0

вы нашли решение вашей проблемы? – Ravi

Смежные вопросы