2012-05-16 3 views
5

Ich habe eine Aktivität mit zwei Buttons und einem TextView in einem LinearLayout. Mein TextView ist nach unten versetzt und der Text passt nicht in die Box. Kannst du erklären, was passiert? Ich denke, dass es mit dem Auffüllen zusammenhängt, und ich habe mehrere Diskussionen über die Gefahren des TextView-Auffüllens gelesen, aber das erklärt nicht, warum der Text an der Unterseite abgeschnitten wird.Android TextView Offset nach unten

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

Dieser Code erzeugt diese Anzeige:

User interface

Die lila das Linearlayout ist, das blaue die Textview ist. Wie Sie sehen können, liegt der obere Teil des TextView unterhalb der Schaltflächen und der untere unterhalb des unteren Randes von LinearLayout. Wenn ich dem TextView Text hinzufüge, erhöht das LinearLayout seine Höhe entsprechend, aber weil das TextView versetzt ist, verliere ich immer das untere Ende der letzten Zeile.

lief ich Hierarchy-Viewer und es gab mir dieses Drahtmodell:

Wireframe image from Hierarchy Viewer

die die vertikalen nach oben versetzt zeigt, aber den Boden des Textview vermisst. Das gleiche Drahtmodell mit den Linearlayout ausgewählt sieht wie folgt aus:

Wireframe image from Hierarchy Viewer - LinearLayout selected

Nach Hierarchie Viewer die Oberseite der Tasten ist bei 0, aber die Spitze des Textview ist auf 7 ich verschiedene Korrekturen versucht haben , meist aus dieser Site:

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

Keine dieser behoben mein Problem.

Antwort

5

Set android:baselineAligned Eigenschaft Ihrer LinearLayout bis false.

Aus Dokumentation:

Wenn auf falsch, verhindert, dass das Layout von seinen Kindern Basislinien ausrichten. Dieses Attribut ist besonders nützlich, wenn die Kinder unterschiedliche Werte für die Schwerkraft verwenden. Der Standardwert ist wahr.

+0

Ja, das funktioniert! Ich verstehe nicht, warum der LinearLayout standardmäßig den Text über seine Grenzen hinaus schieben soll. – TomDestry

+1

Sie können diesen Beitrag beispielsweise lesen, um zu verstehen, was [Baseline-Mittelwert] (https://groups.google.com/d/topic/android-developers/1gPy9zo28ak/discussion) bedeutet. Standardmäßig wird also jedes nachfolgende Widget in LinearLayout auf das vorherige Widget ausgerichtet. In unserem Fall ist die erste ** Zeile von 'TextView' auf den Text des 'Buttons' ausgerichtet.Ich stimme zu, es ist kein intuitives Verhalten, aber es ist. – StenaviN

0

Versuchen Sie, die layout_gravity für die Textview wie diese Einstellung:

<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

Es wird nicht funktionieren – StenaviN

2

geben die layout_gravity der Textview sein 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! So einfach, danke! Der Standardwert scheint NONE zu sein. Irgendeine Idee, warum es standardmäßig den Text teilweise außer Sichtweite bringt? – TomDestry

0

Wenn Sie dieses Problem mit mehreren Textviews haben, können Sie hinzufügen android:gravity="center_vertical" bis LinearLayout