Android: combinar texto e imagen en un botón o ImageButton

Resuelto znq asked hace 54 años • 19 respuestas

Estoy tratando de tener una imagen (como fondo) en un botón y agregar dinámicamente, dependiendo de lo que sucede durante el tiempo de ejecución, algo de texto encima/sobre la imagen.

Si lo uso ImageButtonni siquiera tengo la posibilidad de agregar texto. Si lo uso, Buttonpuedo agregar texto pero solo definir una imagen con android:drawableBottomatributos XML similares a los definidos aquí .

Sin embargo, estos atributos solo combinan texto e imagen en las dimensiones x e y, lo que significa que puedo dibujar una imagen alrededor de mi texto, pero no debajo/debajo de mi texto (con el eje z definido como saliendo de la pantalla).

¿Alguna sugerencia sobre cómo hacer esto? Una idea sería extender Buttono ImageButtonanular el draw()método. Pero con mi nivel actual de conocimiento realmente no sé cómo hacer esto (renderizado 2D). ¿Quizás alguien con más experiencia conozca una solución o al menos algunos consejos para empezar?

znq avatar Jan 01 '70 08:01 znq
Aceptado

Para usuarios que solo quieren poner el fondo, la imagen del icono y el texto en uno Button de diferentes archivos: establecer en un Buttonfondo, dibujable arriba/abajo/derecha/izquierda y atributos de relleno .

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

Para una disposición más sofisticada, también puede utilizar RelativeLayout(o cualquier otro diseño) y hacer que se pueda hacer clic en él.

Tutorial: Gran tutorial que cubre ambos casos: http://izvornikod.com/Blog/tabid/82/EntryId/8/Creating-Android-button-with-image-and-text-using-relative-layout.aspx

OneWorld avatar Sep 17 '2010 09:09 OneWorld

Hay una solución mucho mejor para este problema.

Simplemente tome un normal Buttony use drawableLeftlos atributos y gravity.

<Button
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:drawableLeft="@drawable/my_btn_icon"
  android:gravity="left|center_vertical" />

De esta manera obtienes un botón que muestra un ícono en el lado izquierdo del botón y el texto en el sitio derecho del ícono centrado verticalmente .

schlingel avatar May 14 '2011 09:05 schlingel

Puede llamar setBackground()a Buttonpara configurar el fondo del botón.

Cualquier texto aparecerá encima del fondo.

Si buscas algo similar en xml existe: android:backgroundatributo que funciona de la misma manera.

m_vitaly avatar Oct 07 '2009 17:10 m_vitaly

ingrese la descripción de la imagen aquí

     <Button
            android:layout_width="0dp"
            android:layout_weight="1"
            android:background="@drawable/home_button"
            android:drawableLeft="@android:drawable/ic_menu_edit"
            android:drawablePadding="6dp"
            android:gravity="left|center"
            android:height="60dp"
            android:padding="6dp"
            android:text="AndroidDhina"
            android:textColor="#000"
            android:textStyle="bold" />
Dhina k avatar Sep 10 '2015 06:09 Dhina k