web-dev-qa-db-fra.com

Comment afficher le texte sur un ImageButton?

J'ai un ImageButton et je veux montrer un texte et une image dessus. Mais quand j'essaye sur l'émulateur:

<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 l'image mais sans le texte. Comment puis-je afficher le texte? Aidez-moi, s'il vous plaît!

117
Võ Quang Hòa

Comme vous ne pouvez pas utiliser Android:text, je vous recommande d'utiliser un bouton normal et d'utiliser l'un des dessinables 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 placer le dessinable où vous voulez en utilisant: drawableTop, drawableBottom, drawableLeft ou drawableRight.

UPDATE

Pour un bouton, cela fonctionne aussi très bien. Mettre Android:background c'est 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" />

Je viens d'avoir ce problème et fonctionne parfaitement.

247
Cristian

Il est techniquement possible de mettre une légende sur un ImageButton si vous voulez vraiment le faire. Il suffit de mettre un TextView sur le ImageButton en utilisant FrameLayout. Rappelez-vous simplement de ne pas rendre la 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>
58
UncleIstvan

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" />
5
Naveed Ahmad

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>
4
mxml

En fait, _Android:text_ n’est pas un argument accepté par ImageButton, mais, si vous essayez d’obtenir un bouton avec un arrière-plan spécifié (et non Android default), utilisez le _Android:background_ xml attribut, ou le déclarer de la classe avec .setBackground();

4
Samuel

J'ai résolu ce problème en plaçant les ImageButton et TextView dans un LinearLayout à 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>
2
Rafael Dvl

vous pouvez utiliser plutôt un attribut Button et Android: drawableTop (ou gauche, droite, bas).

2
schwiz

Meilleur moyen:

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

Heres un exemple de cercle de Nice:

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 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"/>
1
Karl Morrison

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

Le truc c'est:

Il semble que vous deviez utiliser Button (et regarder drawableTop ou setCompoundDrawablesWithIntrinsicBounds(int,int,int,int)).

0
Ajay Venugopal