2012-03-30 2 views
23

Ich habe diese Komponente:Zentrieren der Textview Text vertikal in Bezug auf seine drawableLeft Bild

<TextView 
    android:id="@+id/item_name" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:drawableLeft="@drawable/icon" /> 

Das Bild im drawableLeft Attribut ist größer als die Schriftart des Textes, so möchte ich den Text vertikal zentriert in Bezug zum Bild. Wie kann ich diesen Effekt bekommen?

Antwort

79

Sie wollen "Schwerkraft" beachten Sie dies ist nicht mit Layout Schwerkraft verwechselt werden, Layout Schwerkraft bewegt sich die gesamte Textansicht, während die Schwerkraft den Text innerhalb der Textansicht bewegt.

<TextView 
    android:id="@+id/item_name" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:drawableLeft="@drawable/icon" 
    android:gravity="center_vertical" /> 
+1

Danke, ich habe vorher versucht, layout_gravity und es hat nicht funktioniert, wusste nicht über den Unterschied, aber jetzt ist es in Ordnung. – user940016

+0

vielen Dank ... es funktioniert auch für mich – xFighter

0

sollten Sie legen sowohl die Drawable und die TextView in einem RelativeLayout und verwenden Sie das Attribut layout_alignBaseline auf TextView.

Sie auch nur die beiden Elemente platzieren können, Drawable und TextView innerhalb eines LinearLayout mit einer horizontal Orientierung und layout_height="wrap_content" und verwenden layout_gravity="center_vertical" auf TextView.

+0

mit Android: Schwerkraft wäre eine viel sauberere und schnellere Methode, obwohl dies würde Ihnen ein bisschen mehr Flexibilität, um Bilder im laufenden Betrieb, etc. Größe ändern – Merkidemis

+0

Vielen Dank dafür Ich wollte das DrawableLeft nicht verwenden, da das Symbol zu klein war und ich stattdessen ein ImageButton verwenden wollte. Ich habe mit Margen rumgespielt, bis ich auf deine Antwort gestoßen bin. Upvoted. – span

27

Neben der Schwerkraft einstellen, dies auch mit Ausrichtung in einigen Situationen durch Reduzierung Polsterungen auf der Ober- und Unterseite des Textview helfen kann, was ungleich sein können:

android:includeFontPadding="false" 
+6

Danke, 'android: gravity' in Kombination mit diesem löste es für mich! – joscarsson

+2

Ja, es hilft mir auch! Ich danke dir sehr! –

0

Wenn Sie kümmern sich nicht über Text Akzente, versuchen Sie einfach android:includeFontPadding="false". Dies wird zusätzliche obere und untere Polsterung von TextView entfernen. Wie android:gravity="center_vertical" hat es keine Auswirkungen auf meinen Code.