2010-12-16 124 views
93

J'ai un ImageButton et je veux montrer un texte et une image dessus. Mais quand j'essayeComment afficher le texte sur un ImageButton?

<ImageButton 
android:text="OK" 
android:id="@+id/buttonok" 
android:src="@drawable/buttonok" 
android:layout_width="match_parent" 
android:layout_height="wrap_content"/> 

Je reçois sur l'émulateur le bouton ai l'image mais sans le texte. Comment puis-je montrer le texte, s'il vous plaît aidez-moi!

Répondre

207

Comme vous ne pouvez pas utiliser android:text, je vous recommande d'utiliser un bouton normal et d'utiliser l'un des tirages composés. Par exemple:

<Button 
    android:id="@+id/buttonok" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:drawableLeft="@drawable/buttonok" 
    android:text="OK"/> 

Vous pouvez mettre le drawable où vous voulez en utilisant: drawableTop, drawableBottom, drawableLeft ou drawableRight.

MISE À JOUR

Pour un bouton ce fonctionne aussi très bien. Mettre android:background va bien!

<Button 
    android:id="@+id/fragment_left_menu_login" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:background="@drawable/button_bg" 
    android:text="@string/login_string" /> 

J'ai juste eu ce problème et fonctionne parfaitement.

+1

Merci beaucoup: D –

+2

Cette option fonctionne le mieux, à moins que vous avez besoin d'une sorte de mise en page fou bouton recherche, comme une image sandwhiched par deux textviews. J'ai d'abord essayé un objet layout défini comme widget.button, puis y ai ajouté une imageview et une textview, mais après le profilage et la disposition des boutons ci-dessus, j'ai économisé près de 30% en temps de mesure, 50% en temps de mise en page et 15 -20% en temps de Draw sur mon FramLayout, et est passé de 38 objets à 26. c'est une économie assez substantielle. –

+0

Quelle est la différence entre le drawableTop, le fond, etc.? – shim

4

En fait, android:text est pas un argument accepté par ImageButton mais, si vous essayez d'obtenir un bouton avec un arrière-plan spécifiée (non par défaut Android) utiliser l'attribut android:background xml ou déclarer de la classe avec .setBackground();

2

vous pouvez utiliser un Button normal et l'attribut android: drawableTop (ou gauche, droite, bas) à la place.

51

Il est techniquement possible de mettre une légende sur un bouton d'image si vous voulez vraiment le faire. Il suffit de mettre un textview sur le bouton de l'image en utilisant FrameLayout. N'oubliez pas de ne pas rendre le Textview cliquable.

Exemple:

<FrameLayout> 
    <ImageButton 
     android:id="@+id/button_x" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:background="@null" 
     android:scaleType="fitXY" 
     android:src="@drawable/button_graphic" > 
    </ImageButton> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:clickable="false" 
     android:text="TEST TEST" > 
    </TextView> 
</FrameLayout> 
+0

Cela ne semble pas fonctionner sur Lollipop si fonctionne parfaitement sur les autres. – Hong

+1

Le problème avec cette approche est que le texte n'est pas affecté par l'état du bouton (désactivé, etc.) ... sauf si vous le faites manuellement. – TheOperator

2

La meilleure façon:

<Button 
android:text="OK" 
android:id="@+id/buttonok" 
android:background="@drawable/buttonok" 
android:layout_width="match_parent" 
android:layout_height="wrap_content"/> 
+2

Cela ne semble pas être différent de ce que l'OP a essayé à l'origine. – PhonicUK

+0

Désolé, je me trompe de code. Wasn't ImageButton, était juste Button. – eloytxo

0

ImageButton ne peut pas avoir text (ou, au moins, android:text ne figure pas dans ses attributs).

Le tour est:

Il semble que vous devez utiliser Button (et regardez drawableTop ou setCompoundDrawablesWithIntrinsicBounds(int,int,int,int))

1

Je résolu ce problème en mettant le ImageButton et TextView l'intérieur d'une LinearLayout avec orientation verticale Fonctionne très bien.. !

<LinearLayout 
    android:id="@+id/linLayout" 
    android:layout_width="80dp" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" > 

    <ImageButton 
     android:id="@+id/camera_ibtn" 
     android:layout_width="60dp" 
     android:layout_height="60dp" 
     android:layout_gravity="center" 
     android:background="@drawable/camera" /> 

    <TextView 
     android:id="@+id/textView2" 
     android:layout_width="80dp" 
     android:layout_height="wrap_content" 
     android:gravity="center" 
     android:text="@string/take_pic" 
     android:textColor="#FFFFFF" 
     android:textStyle="bold" /> 

</LinearLayout> 
1

Heres un bel exemple de cercle:

drawable/circle.xml:

<?xml version="1.0" encoding="utf-8"?> 
<shape 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="oval"> 

    <solid 
     android:color="#ff87cefa"/> 

    <size 
     android:width="60dp" 
     android:height="60dp"/> 
</shape> 

Et puis sur le bouton dans votre fichier xml:

<Button 
    android:id="@+id/btn_send" 
    android:layout_width="60dp" 
    android:layout_height="60dp" 
    android:background="@drawable/circle" 
    android:text="OK"/> 
3

Vous pouvez utiliser un LinearLayout au lieu d'utiliser Button c'est un arrangement que j'ai utilisé dans mon application

<LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_margin="20dp" 
     android:background="@color/mainColor" 
     android:orientation="horizontal" 
     android:padding="10dp"> 

     <ImageView 
      android:layout_width="50dp" 
      android:layout_height="50dp" 
      android:background="@drawable/ic_cv" 
      android:textColor="@color/offBack" 
      android:textSize="20dp" /> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_margin="10dp" 
      android:text="@string/cartyCv" 
      android:textColor="@color/offBack" 
      android:textSize="25dp" /> 

    </LinearLayout> 
+0

Excellente solution! OnClick fonctionne aussi parfaitement sur LinearLayout. Ne voyez pas une raison pour laquelle nous devrions utiliser un bouton ou ImageButton – Sam

1

Les gars J'ai besoin de développer le bouton de réglage et de déconnexion, j'ai utilisé le code ci-dessous. enter image description here

<Button 
     android:id="@+id/imageViewLogout" 
     android:layout_width="100dp" 
     android:layout_height="wrap_content" 
     android:layout_margin="@dimen/size_30dp" 
     android:layout_alignParentLeft="true" 
     android:text="Settings" 
     android:drawablePadding="10dp" 
     android:background="@android:color/transparent" 
     android:layout_alignParentBottom="true" 
     android:drawableTop="@drawable/logout" />