2012-05-16 2 views
5

У меня есть активность с двумя кнопками и TextView в LinearLayout. Мой TextView смещен вниз, и текст не помещается внутри коробки. Можете ли вы объяснить, что происходит? Я думаю, что это связано с дополнением, и я прочитал несколько дискуссий о опасностях заполнения TextView, но это не объясняет, почему текст обрезается внизу.Android TextView смещение вниз

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    android:background="#800080"> 

    <Button 
     android:text="This" 
     android:background="@drawable/button_red" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
    /> 
    <Button 
     android:text="That" 
     android:background="@drawable/button_green" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
    /> 
    <TextView 
     android:text="Copious amounts of text that overflows onto several lines on a small screen, causing the TextView to dangle below the buttons. Why it does this I can't imagine. I only hope someone can help me with this." 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:background="#533f93" 
    /> 
</LinearLayout> 

Этот код производит этот экран:

User interface

Пурпурный является LinearLayout, синий является TextView. Как вы можете видеть, верхняя часть TextView ниже, чем у кнопок, а нижняя часть находится ниже нижней части LinearLayout. Когда я добавляю текст в TextView, LinearLayout соответственно увеличивает его высоту, но поскольку TextView смещен, я всегда теряю нижнюю часть последней строки.

Я побежал Hierarchy Viewer, и он дал мне это каркасные:

Wireframe image from Hierarchy Viewer

Это показывает вертикальное смещение в верхней части, но не попадает в нижнюю часть TextView. То же каркасный с LinearLayout выбранными выглядит следующим образом:

Wireframe image from Hierarchy Viewer - LinearLayout selected

Согласно иерархии просмотра, в верхней части кнопок на 0, а верхняя часть TextView находится в 7. Я пробовал различные исправления , в основном изъятых с этого сайта:

android:paddingTop="0dp" 
    android:background="@null" 
    android:includeFontPadding="false" 

Ни одна из этих исправленных проблем.

ответ

5

android:baselineAligned Недвижимость вашего LinearLayout до false.

Из документации:

При установке на ложной, предотвращает расположение от выравнивания своих детей базовых линий. Этот атрибут особенно полезен, когда дети используют различные значения для силы тяжести. Значение по умолчанию: true.

+0

Да, это работает! Я не понимаю, почему по умолчанию LinearLayout выводит текст за пределы его. – TomDestry

+1

Вы можете прочитать, например, это сообщение, чтобы понять, что означает [базовое значение] (https://groups.google.com/d/topic/android-developers/1gPy9zo28ak/discussion). Таким образом, по умолчанию каждый последующий виджет в «LinearLayout» выравнивается по базовой линии со своим предыдущим виджетами. В нашем случае ** первая ** строка «TextView» выравнивается по базовой линии с текстом 'Button'.Я согласен, это не интуитивное поведение, но это так. – StenaviN

0

Попробуйте установить layout_gravity для TextView, как это:

<TextView 
    android:text="Copious amounts of text that overflows onto several lines on a small screen, causing the TextView to dangle below the buttons. Why it does this I can't imagine. I only hope someone can help me with this." 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:background="#533f93" 
    android:layout_gravity="top" 
/> 
+0

Это не сработает – StenaviN

2

дать layout_gravity в TextView быть center_vertical

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:orientation="horizontal" 
android:background="#800080"> 

<Button 
    android:text="This" 

    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
/> 
<Button 
    android:text="That" 

    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
/> 
<TextView 
    android:text="Copious amounts of text that overflows onto several lines on a small screen, causing the TextView to dangle below the buttons. Why it does this I can't imagine. I only hope someone can help me with this." 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:background="#533f93" 
android:layout_gravity="center_vertical"/> 
</LinearLayout> 
+0

Gah! Так просто, спасибо! По умолчанию используется NONE. Любая идея, почему по умолчанию она отталкивает текст частично из поля зрения? – TomDestry

0

Если у вас есть эта проблема с несколькими TextViews вы можете добавить android:gravity="center_vertical" до LinearLayout

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