Wie vertikal ausrichten von text in einem button mit einem hintergrund drawable?
Hatte ich einen einfachen button mit einem hintergrund-Bild definiert, wie
android:background="?attr/button"
wo ?attr/button
war ein Verweis auf ein einfaches 9-patch png. Alles war in Ordnung, text in der Schaltfläche ausgerichtet war richtig.
Dann brauchte ich einen anderen hintergrund für eine pressed-Status der Schaltfläche. So habe ich geändert, um
android:background="@drawable/state_button"
wo @drawable/state_button
ist eine xml mit den folgenden Staaten
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:drawable="@drawable/button_pressed" /> <!-- pressed -->
<item android:state_focused="true"
android:drawable="@drawable/button_pressed" /> <!-- focused -->
<item android:drawable="@drawable/button" /> <!-- default -->
</selector>
Und nach, dass ich nicht richten Sie den text richtig. Wenn ich android:gravity="center_vertical"
den text gezeichnet wird ungefähr 1/4 der Höhe der Buttons von oben.
Ich doppelt überprüft meine 9-patch Bilder, alles scheint in Ordnung mit Ihnen. Und ich habe auch versucht eine normale PNG-Bilder für den hintergrund, es ist auch nicht irgendetwas zu ändern.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie überprüfen Sie die 9-patch-drawables, die Sie verwenden. Die standard-Android-buttons enthalten eine riesige Menge an Polsterung am oberen und unteren Rand der Schaltflächen, so dass es wie der text ist immer zentriert. Sie können dies durch die Eröffnung der 9-patch-Datei, Zoom in eng und im Blick auf die Differenz zwischen den Pixeln auf der linken/oberen und der rechten/unteren Seite. Die left/top-Seiten markieren, welche Teile des Bildes gedehnt werden kann, um Platz für mehr text, während die rechten/unteren Seiten markieren den Platz, der tatsächlich mit text gefüllt werden. Also der Unterschied zwischen dem rechts - /Unterseite und der linken/oberen Bereich werden die Polsterung. Es nicht durchaus sinnvoll auf den ersten, aber nach spielen mit ihm um, es ist nicht so schlimm.
Den Fall, Sie sind nicht vertraut mit es, ein nützliches Werkzeug für die Bearbeitung 9patches ist die draw9patch.bat-Programm im SDK-tools-Ordner.
Ich hatte das exakt gleiche Problem aber meine 9-patch-drawables waren ok. Die Ursache war immer noch die gleiche, obwohl, nur ich war mit custom drawables mit dem layer-element in der Liste.
Scheint es, dass, wenn der Button legt seinen text berücksichtigt alle der Staaten in Ihrem Selektor an. Nachdem ich aktualisiert alle Mitgliedstaaten auf, die einander entsprechen, meinen text danach richtig ausgerichtet sind.