J’essaie d’avoir une image (comme arrière-plan) sur un bouton et d’ajouter dynamiquement, en fonction de ce qui se passe pendant l’exécution, du texte au-dessus de l’image.
Si j'utilise ImageButton
, je n'ai même pas la possibilité d'ajouter du texte.
Si j'utilise Button
, je peux ajouter du texte mais seulement définir une image avec android:drawableBottom
et des attributs XML similaires comme définis [ici][1].
Cependant, ces attributs ne combinent le texte et l'image que dans les dimensions x et y, ce qui signifie que je peux dessiner une image autour de mon texte, mais pas sous mon texte (avec l'axe z défini comme sortant de l'affichage).
Avez-vous des suggestions sur la façon de procéder ? Une idée serait d'étendre Button
ou ImageButton
et de surcharger la méthode draw()
. Mais avec mon niveau actuel de connaissances, je ne sais pas vraiment comment faire (rendu 2D). Peut-être que quelqu'un qui a plus d'expérience connaît une solution ou au moins quelques pistes pour commencer ?
[1] : http://developer.android.com/reference/android/widget/TextView.html#attr_android:drawableBottom
*Pour les utilisateurs qui veulent juste mettre un fond, une image-icône et du texte dans un Button
à partir de différents fichiers : Définissez sur un Button
les attributs background, drawableTop/Bottom/Rigth/Left et padding*.
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/home_btn_test"
android:drawableTop="@drawable/home_icon_test"
android:textColor="#FFFFFF"
android:id="@+id/ButtonTest"
android:paddingTop="32sp"
android:drawablePadding="-15sp"
android:text="this is text"></Button>
Pour un arrangement plus sophistiqué, vous pouvez également utiliser RelativeLayout
et le rendre cliquable.
Tutoriel: Excellent tutoriel qui couvre les deux cas : http://izvornikod.com/Blog/tabid/82/EntryId/8/Creating-Android-button-with-image-and-text-using-relative-layout.aspx
Il existe une bien meilleure solution pour ce problème.
Prenez simplement un Button
normal et utilisez les attributs drawableLeft
et gravity
.
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:drawableLeft="@drawable/my_btn_icon"
android:gravity="left|center_vertical" />
De cette façon, vous obtenez un bouton qui affiche une icône dans la partie gauche du bouton et le texte à l'emplacement droit de l'icône centré verticalement.
Vous pouvez appeler setBackground()
sur un Bouton
pour définir le fond du bouton.
Tout texte apparaîtra au-dessus de l'arrière-plan.
Si vous cherchez quelque chose de similaire en xml, il existe :
android:background
attribut qui fonctionne de la même manière.