2010-12-16 14 views
93

Tengo un ImageButton y quiero mostrar un texto y una imagen en él. Pero cuando intento¿Cómo mostrar el texto en un ImageButton?

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

Me pongo en Emulator el botón tiene imagen pero sin el texto. ¿Cómo puedo mostrar el texto? ¡Por favor, ayúdenme!

Respuesta

207

Como no puede usar android:text, le recomiendo que use un botón normal y use uno de los compuestos arrastrables. Por ejemplo:

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

Se puede poner el dibujable donde quiera que desee utilizando: drawableTop, drawableBottom, drawableLeft o drawableRight.

ACTUALIZACIÓN

Para un botón esto también funciona bastante bien. ¡Poner android:background 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" /> 

Acabo de tener este problema y está funcionando perfectamente.

+1

Muchas gracias: D –

+2

Esta opción funciona mejor, a menos que necesite algún tipo de disposición de los botones de mirada loco, como una imagen sandwhiched por dos textviews. Originalmente probé un objeto de diseño definido como widget.button, luego puse una vista de imagen y una vista de texto, pero después de perfilar eso, y el diseño de botón anterior, guardé casi 30% en tiempo de medida, 50% en tiempo de diseño y 15 -20% en Draw time en mi FramLayout, y pasó de 38 objetos a 26. es un ahorro considerable. –

+0

¿Cuál es la diferencia entre DrawableTop, bottom, etc.? – shim

4

En realidad, android:text no es un argumento aceptado por ImageButton Pero, si usted está tratando de conseguir un botón con un fondo especificado (por defecto no androide) utilizar el atributo xml android:background, o declarar que de la clase con .setBackground();

2

puede usar un Button normal y el atributo android: drawableTop (o izquierda, derecha, abajo) en su lugar.

51

Técnicamente es posible poner un título en un botón de imagen si realmente desea hacerlo. Simplemente coloque una vista de texto sobre el botón de imagen usando FrameLayout. Recuerde no hacer clic en la vista de texto.

Ejemplo:

<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

Esto no parece funcionar en Lollipop aunque funciona perfectamente en otros. – Hong

+1

El problema con este enfoque es que el texto no se ve afectado por el estado del botón (deshabilitado, etc.) ... a menos que lo haga manualmente. – TheOperator

2

Mejor manera:

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

Esto no parece ser diferente de lo que originalmente intentó el OP. – PhonicUK

+0

Lo siento, confundo mi código. Wasn't ImageButton, was just Button. – eloytxo

0

ImageButton no puede tener text (o, al menos, android:text no aparece en sus atributos).

El truco es:

Parece que es necesario utilizar Button (y mirar drawableTop o setCompoundDrawablesWithIntrinsicBounds(int,int,int,int))

1

He resuelto esto poniendo el ImageButton y TextView dentro de un LinearLayout con orientación vertical funciona muy 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 círculo buen ejemplo:

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> 

Y a continuación, el botón en el archivo XML:

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

Puede utilizar un LinearLayout en lugar de utilizar Button es un arreglo que utilicé en mi aplicación

<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

¡Gran solución! onClick funciona perfectamente en LinearLayout también. No veo una razón por la que deberíamos usar un botón o ImageButton – Sam

1

Chicos Necesito desarrollar el botón de configuración y cierre de sesión. Utilicé el siguiente código. 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" /> 
Cuestiones relacionadas