2015-01-15 4 views
0

Это код, который я пытаюсь. но текст, который имеет layout_gravity, не имеет права сдвигаться вправо в горизонтальной линейной компоновке.Почему масса текста TextView не работает в горизонтальном LinearLayout?

<LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginLeft="10dp" 
      android:layout_marginRight="10dp" 
      android:orientation="horizontal" > 

      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="50dp" 
       android:layout_gravity="left" 
       android:gravity="center_vertical" 
       android:text="This Year" 
       android:textColor="@color/gray_dark" 
       android:textSize="18sp" /> 

      <TextView 
       android:id="@+id/tvHomeIncomeThisYear" 
       android:layout_width="wrap_content" 
       android:layout_height="50dp" 
       android:gravity="center_vertical" 
       android:layout_gravity="right" 
       android:text="$0.00 USD" 
       android:textColor="#000000" 
       android:textSize="18sp" /> 

     </LinearLayout> 

ответ

2

Все дети LinearLayout уложены друг за другом. Для вашей цели вы можете использовать FrameLayout, или вы можете добавить пространства в качестве еще одного объекта вида ребенка:

<LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="10dp" 
     android:layout_marginRight="10dp" 
     android:orientation="horizontal" > 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="50dp" 
      android:layout_gravity="left" 
      android:gravity="center_vertical" 
      android:text="This Year" 
      android:textColor="@color/gray_dark" 
      android:textSize="18sp" /> 

     <Space 
      android:layout_width="0dip" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" /> 

     <TextView 
      android:id="@+id/tvHomeIncomeThisYear" 
      android:layout_width="wrap_content" 
      android:layout_height="50dp" 
      android:gravity="center_vertical" 
      android:layout_gravity="right" 
      android:text="$0.00 USD" 
      android:textColor="#000000" 
      android:textSize="18sp" /> 
</LinearLayout> 

Space требует уровень 14 или выше API. В противном случае вы можете использовать View.

+0

благодарю вас за ответ. но можете ли вы сказать мне, почему это происходит? Я устанавливаю одного ребенка влево, а другой - вправо, тогда он должен быть настроен автоматически. –

+0

Это особое поведение LinearLayout. LinearLayout раздувает детские взгляды один за другим без каких-либо дополнительных пробелов, кроме paddings и полей ребенка. Если вы используете ориентацию = «горизонтальная», то правый край первого вида всегда будет касаться левого края второго вида. – inverse12

+0

ok, то что же особенного после добавления

0

Используйте его с использованием относительного компоновки

<RelativeLayout 
    android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="10dp" 
     android:layout_marginRight="10dp"> 

    <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="50dp" 
      android:layout_gravity="left" 
      android:gravity="center_vertical" 
      android:text="This Year" 
      android:textColor="@color/gray_dark" 
      android:textSize="18sp" /> 

     <TextView 
      android:id="@+id/tvHomeIncomeThisYear" 
      android:layout_width="wrap_content" 
      android:layout_height="50dp" 
      android:gravity="center_vertical" 
      android:layout_alignParentRight="true" 
      android:text="$0.00 USD" 
      android:textColor="#000000" 
      android:textSize="18sp" /> 
</RelativeLayout> 
1

Изменение LinearLayout в RelativeLayout и android:layout_gravity="right" к android:layout_alignParentRight="true". Удалить android:orientation="horizontal".

0

Просто измените ширину TextView tvHomeIncomeThisYear в match_parent и установить его gravity и layout_gravityкright|center_vertical и center_vertical соответственно:

 <TextView 
      android:id="@+id/tvHomeIncomeThisYear" 
      android:layout_width="match_parent" 
      android:layout_height="50dp" 
      android:gravity="right|center_vertical" 
      android:layout_gravity="center_vertical" 
      android:text="$0.00 USD" 
      android:textColor="#000000" 
      android:textSize="18sp" /> 
0

Вы на самом деле не нужно, чтобы изменить родительский взгляд на нечто иное, чем LinearLayout , или добавьте дополнительные виды в качестве прокладок и т. д., просто добавьте свойство layout_weight в самый левый TextView со значением «1» и установите его layout_width на ноль (0dp):

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginLeft="10dp" 
    android:layout_marginRight="10dp" 
    android:orientation="horizontal" > 

    <TextView 
     android:layout_width="0dp" 
     android:layout_height="50dp" 
     android:layout_weight="1" 
     android:gravity="center_vertical" 
     android:text="This Year" 
     android:textColor="@color/gray_dark" 
     android:textSize="18sp" /> 

    <TextView 
     android:id="@+id/tvHomeIncomeThisYear" 
     android:layout_width="wrap_content" 
     android:layout_height="50dp" 
     android:gravity="center_vertical" 
     android:text="$0.00 USD" 
     android:textColor="#000000" 
     android:textSize="18sp" /> 

</LinearLayout> 

Вы также можете удалить оба свойства android: layout_gravity для TextView, поскольку они не нужны.

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