TextView не отображается правильно в макете таблицы

Текстовое изображение не отображает текст правильно. Текст охватывает две строки, но вторая строка текста показывает только верхнюю половину текста, как если бы текст был разрезан на две половины по горизонтали, несмотря на использование height = wrap_content.

Код xml:

<tablerow android:layout_width="fill_parent" android:layout_height="wrap_content" android:paddingbottom="15dp" android:weightsum="1">

 <textview android:id="@+id/textView1" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="0.4" android:text="No. of direct Reportees:">

 <edittext android:id="@+id/direct" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="0.6" android:hint="Eg. 12" android:inputtype="numberDecimal" android:textappearance="?android:attr/textAppearanceSmall">

 <requestfocus>
 </requestfocus></edittext>
 </textview></tablerow>

РЕШИТЬ:

Такое поведение обусловлено выравниванием базовой линии. Контейнер имеет правильную высоту (это максимум двух его детей), но Textview сдвигается вниз, чтобы Textview по базовой линии с кнопкой. Это поведение не может быть изменено для сохранения макетов в существующих приложениях. Правильный способ реализации этого макета в вашем случае - добавить android:baselineAligned="false" в теге LinearLayout. Это также избавит вас от лишнего вертикального пространства над TextView.

4 ответа

Такое поведение обусловлено выравниванием базовой линии. Контейнер имеет правильную высоту (это максимум двух его детей), но Textview сдвигается вниз, чтобы выровняться по базовой линии с кнопкой. Это поведение не может быть изменено для сохранения макетов в существующих приложениях. Правильный способ реализации этого макета в вашем случае - добавить android: baselineAligned = "false" в теге LinearLayout. Это также избавит вас от лишнего вертикального пространства над TextView.


Поместите TextView и EditText внутри LinearLayout чтобы заставить атрибут веса работать:

<tablerow android:layout_width="fill_parent" android:layout_height="wrap_content" android:paddingbottom="15dp">
<linearlayout android:id="@+id/table_row_container" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical">
 <textview android:id="@+id/textView1" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="0.4" android:text="No. of direct Reportees:">

 <edittext android:id="@+id/direct" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="0.6" android:hint="Eg. 12" android:inputtype="numberDecimal" android:textappearance="?android:attr/textAppearanceSmall">

 <requestfocus>
 </requestfocus></edittext>
</textview></linearlayout>
</tablerow>


Попробуйте this-

<textview android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="0.4" android:text="No. of direct Reportees:">

 <edittext android:id="@+id/direct" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="0.6" android:hint="Eg. 12" android:inputtype="numberDecimal" android:textappearance="?android:attr/textAppearanceSmall">

 <requestfocus>
 </requestfocus></edittext>

</textview>

Source-

http://www.chess-ix.com/blog/the-use-of-layout_weight-with-android-layouts/


Я думаю, что высота присваивается текстуру перед шириной.

Поскольку в силу веса, ширина вычисляется во время рендеринга.

Таким образом, по назначению времени назначается высота текста.

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

licensed under cc by-sa 3.0 with attribution.