2017-08-07 3 views
-1

J'essaie de créer un style de bouton personnalisé avec une apparence 3D, mais j'ai un problème avec l'état "pressé" du bouton. Le bouton change d'image correctement, mais le texte reste immobile, ce qui donne l'impression que le texte glisse vers le haut sur pression.Problème avec 9 boutons de correctif dans Android

expected vs reality

(lignes rouges ajoutées pour montrer la base de bouton d'annulation)

XML pour la vue bouton (cmdNegative est le bouton d'annulation, layDialogControl est une disposition directement au-dessus des boutons)

<Button 
    android:id="@+id/cmdPositive" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:background="@drawable/button_positive" 
    android:text="Accept" 
    android:layout_marginTop="8dp" 
    android:layout_marginLeft="8dp" 
    android:layout_marginRight="8dp" 
    android:layout_marginBottom="8dp" 
    app:layout_constraintTop_toBottomOf="@+id/layDialogControl" 
    app:layout_constraintEnd_toEndOf="parent" 
    app:layout_constraintStart_toEndOf="@id/cmdNegative" 
    app:layout_constraintBottom_toBottomOf="parent" /> 

XML pour le style de bouton (button_gray est exactement le même que button_green juste ... bien ... gris)

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
     android:state_enabled="false" 
     android:drawable="@drawable/button_gray" /> 
    <item 
     android:state_pressed="true" 
     android:state_enabled="true" 
     android:drawable="@drawable/button_green_pressed" /> 
    <item 
     android:state_focused="true" 
     android:state_enabled="true" 
     android:drawable="@drawable/button_green_pressed" /> 
    <item 
     android:state_enabled="true" 
     android:drawable="@drawable/button_green" /> 
</selector> 

9 pièce non pressée: unpressed 9 patch

Pressé 9 patch: pressed 9 patch

En ce qui je comprends bien, la définition des pixels à droite/bas aurait dû définir la « zone de contenu » et le texte devrait rester dans la vue du contenu, buuuuuuut ce n'est pas le cas. Toutes les idées ou les indications sur l'endroit où j'ai foiré seraient grandement appréciés.

+0

En ce qui concerne votre montage, j'ai supprimé, il est intéressant de noter que les downvotes ne sont pas forcément impolis - le plus souvent ce ne sont que des messages. Il est idéal si quelqu'un accompagne un DV avec des commentaires exploitables, mais ils ne sont pas obligés de le faire. En général, je conseillerais de ne pas s'inquiéter d'eux. – halfer

+0

Ouais c'est génial et tout, mais indépendamment de la question reste sans réponse et ne sera probablement jamais obtenir une réponse, car il sera enterré dans les résultats de recherche. Les raisons n'ont pas d'importance lorsque le résultat final est le même. –

+0

Le résultat final pour la communauté est différent, cependant - si nous propageons la fausseté que les downvotes sont toujours des insultes, plus d'utilisateurs de SO les percevront comme un acte hostile, quand cela n'a pas été l'intention de l'électeur. – halfer

Répondre

0

Je pense que vous avez mal compris les images de 9 patchs. Les zones extensibles (côtés supérieur et gauche) que vous définissez s'étendront en fonction de la définition de votre mise en page. La zone de contenu, les parties droite et inférieure définies définiront les limites de votre contenu de la même manière que la spécification d'un rectangle/carré de la zone où votre contenu sera conservé. Votre image pour le bouton Accepter (pressé) ne s'étire pas lorsque vous cliquez dessus, donc peu importe à quoi ressemble votre image.

En outre, si votre texte contient le texte, il est inutile d'avoir une zone de contenu. Si le texte de votre image de bouton est défini, vous pouvez résoudre votre problème en redéfinissant votre zone de contenu. En d'autres termes, sur l'état pressé, vous substituez simplement une image qui a la zone de contenu correcte, de sorte qu'elle semble avoir été étirée lors d'un clic, mais en fait, c'est juste une autre image.

+0

Je pense que vous avez peut-être mal compris le problème. Le rendu du 9-patch du bouton de pression n'est pas juste une mise à l'échelle, et il n'y a pas de texte dans les fichiers image (car cela nécessiterait une image différente pour chaque bouton créé). J'ai une zone de contenu définie pour les 9 patches (vous pouvez voir qu'il y a des pixels noirs sur la droite et la partie inférieure), mais le problème est que la zone de contenu n'est pas utilisée, elle dessine le texte sans tenir compte de ce que 9- patch j'utilise. Si j'ai mal défini la zone de contenu, veuillez expliquer comment. –

+0

J'ai relu votre commentaire, et maintenant je pense que vous dites qu'il y a quelque chose qui cloche avec mon sélecteur/comment j'ai mis en place le style, mais encore une fois, si je l'ai mal fait, veuillez expliquer comment. –