Estoy intentando tener una imagen (como fondo) en un botón y añadir dinámicamente, dependiendo de lo que ocurra durante el tiempo de ejecución, algún texto por encima de la imagen.
Si utilizo ImageButton
ni siquiera tengo la posibilidad de añadir texto.
Si uso Button
puedo añadir texto pero sólo definir una imagen con android:drawableBottom
y atributos XML similares como se define aquí.
Sin embargo, estos atributos sólo combinan texto & imagen en las dimensiones x y y, lo que significa que puedo dibujar una imagen alrededor de mi texto, pero no 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 Button
o ImageButton
y anular el método draw()
. Pero con mi nivel actual de conocimientos no sé realmente cómo hacer esto (renderizado 2D). ¿Quizás alguien con más experiencia conozca una solución o al menos algunas indicaciones para empezar?
Para los usuarios que sólo quieren poner el fondo, la imagen-icono y el texto en un Botón
de diferentes archivos: Establece en un Botón
los atributos de fondo, drawableTop/Bottom/Rigth/Left y padding.
<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
y hacer que se pueda hacer clic.
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
Hay una solución mucho mejor para este problema.
Simplemente toma un Button
normal y utiliza los atributos drawableLeft
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 se obtiene un botón que muestra un icono en la parte izquierda del botón y el texto en el sitio derecho del icono centrado verticalmente.
Puedes llamar a setBackground()
en un Button
para establecer el fondo del botón.
Cualquier texto aparecerá sobre el fondo.
Si buscas algo similar en xml existe
android:background
atributo que funciona de la misma manera.