¿Cómo mostrar el texto en un ImageButton?

5 minutos de lectura

avatar de usuario
Võ Quang Hoa

Yo tengo un ImageButton y quiero mostrar un texto y una imagen en él. Pero cuando pruebo el emulador:

<ImageButton 
    android:text="OK" 
    android:id="@+id/buttonok" 
    android:src="https://stackoverflow.com/questions/4457030/@drawable/buttonok"
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" />

Obtengo la imagen pero sin el texto. ¿Cómo puedo mostrar el texto? ¡Por favor, ayúdame!

avatar de usuario
Cristian

Como no puedes usar android:text Te recomiendo usar un botón normal y usar uno de los dibujables compuestos. Por ejemplo:

<Button 
    android:id="@+id/buttonok" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"
    android:drawableLeft="https://stackoverflow.com/questions/4457030/@drawable/buttonok"
    android:text="OK"/>

Puedes poner el dibujable donde quieras usando: drawableTop, drawableBottom, drawableLeft o drawableRight.

ACTUALIZAR

Para un botón, esto también funciona bastante bien. Poniendo 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.

  • Esta opción funciona mejor, a menos que necesite algún tipo de diseño de botón de aspecto loco, como una imagen intercalada por dos vistas de texto. Originalmente probé un objeto de diseño definido como widget.button, luego puse una vista de imagen y una vista de texto en él, pero después de perfilar eso y el diseño del botón anterior, ahorré casi un 30% en tiempo de medición, 50% en tiempo de diseño y 15 -20 % en el tiempo de dibujo en mi FramLayout, y pasé de 38 objetos a 26. Eso es un ahorro bastante sustancial.

    – Evan R.

    12/09/2012 a las 20:49

  • @shim drawableTop colocará el dibujable en la parte superior del botón, drawableRight en la parte inferior, etc.

    – Cristian

    25 de octubre de 2012 a las 12:11

  • @RenanBandeira sí, uset setCompoundDrawables*() métodos

    – Cristian

    16 de enero de 2014 a las 5:21

  • ¿Cómo puedo escalar la imagen para que se ajuste al botón? O ajustaría automáticamente la imagen para que encaje con el botón.

    – Alston

    25 de abril de 2014 a las 6:54

  • La misma pregunta que @Stallman, ¿cómo ajustar la imagen con el botón y configurarlo a la izquierda?

    – Khuong

    21 de septiembre de 2015 a las 11:11

avatar de usuario
tíoIstvan

Es técnicamente posible poner un título en un ImageButton si realmente quieres hacerlo. Solo pon un TextView sobre el ImageButton usando FrameLayout. Sólo recuerda no hacer el Textview se puede hacer clic

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="https://stackoverflow.com/questions/4457030/@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>

  • Esto no parece funcionar en Lollipop, aunque funciona perfectamente en otros.

    – Hong

    18 de julio de 2015 a las 15:37

  • 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.

    – El operador

    13 de julio de 2016 a las 12:56

Chicos, necesito desarrollar la configuración y el botón de cierre de sesión, utilicé el siguiente código.
ingrese la descripción de la imagen aquí

    <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" />

avatar de usuario
Samuel

Realmente, android:text no es un argumento aceptado por ImageButton
pero, si está tratando de obtener un botón con un fondo específico (no el predeterminado de Android), use el android:background atributo xml, o declararlo desde la clase con .setBackground();

Puedes usar un LinearLayout En lugar de usar Button es un arreglo que usé 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>

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

    – sam

    17 de junio de 2017 a las 15:03

avatar de usuario
Nathan Schwermann

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

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

    – sam

    17 de junio de 2017 a las 15:03

avatar de usuario
ByteHamster

Resolví esto poniendo el ImageButton y TextView dentro de una LinearLayout con orientación vertical. ¡Funciona genial!

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

¿Ha sido útil esta solución?