2010-05-06 5 views
3

J'ai eu un simple bouton mis en place avec une image d'arrière-plan défini commeComment aligner verticalement du texte dans un bouton avec un arrière-plan dessinable?

android:background="?attr/button" 

?attr/button était une référence à un simple 9-patch .png. Tout a bien fonctionné, le texte dans le bouton a été aligné correctement. Puis j'ai eu besoin d'un fond différent pour un état enfoncé du bouton. Alors j'ai changé que pour

android:background="@drawable/state_button" 

@drawable/state_button est un xml avec les états suivants

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

Après cela, je ne peux pas aligner le texte correctement. Si je mets android:gravity="center_vertical" le texte est dessiné à environ 1/4 de la hauteur du bouton à partir du haut. J'ai revérifié mes images de 9 patchs, tout semble aller bien avec eux. Et j'ai aussi essayé d'avoir des pngs réguliers pour le fond, ça ne change rien non plus.

Répondre

1

Vous devez vérifier les 9 tiroirs que vous utilisez. Les boutons Android standard incluent une grande quantité de rembourrage en haut et en bas des boutons, donnant l'impression que le texte est toujours centré. Vous pouvez le voir en ouvrant le fichier de patch 9, en zoomant de près et en regardant la différence entre les pixels à gauche/haut et à droite/bas. Les côtés gauche/haut indiquent quelles parties de l'image peuvent être étirées pour accueillir davantage de texte, tandis que les côtés droit/inférieur indiquent l'espace qui sera réellement rempli de texte. Donc, la différence entre le côté droit/bas et le côté gauche/haut sera le rembourrage. Cela n'a pas vraiment de sens au début, mais après avoir joué avec, ce n'est pas si mal. Juste au cas où vous ne le sauriez pas, un outil utile pour éditer 9patches est le programme draw9patch.bat dans votre dossier d'outils SDK.

1

J'ai eu exactement le même problème mais mes 9 patchables étaient corrects. La cause était toujours la même, mais j'utilisais des drawables personnalisés en utilisant l'élément layer-list.

Il semble que lorsque le bouton affiche son texte, il prend en compte tous les des états de votre sélecteur. Une fois que j'ai mis à jour tous les états pour correspondre les uns aux autres, mon texte a ensuite été aligné correctement.

Questions connexes