Android: combinar texto e imagen en un botón o ImageButton
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 ImageButton
ni siquiera tengo la posibilidad de agregar texto. Si lo uso, Button
puedo agregar texto pero solo definir una imagen con android:drawableBottom
atributos 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 Button
o ImageButton
anular 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?
Para usuarios que solo quieren poner el fondo, la imagen del icono y el texto en uno Button
de diferentes archivos: establecer en un Button
fondo, 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
Hay una solución mucho mejor para este problema.
Simplemente tome un normal Button
y use drawableLeft
los 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 .
Puede llamar setBackground()
a Button
para configurar el fondo del botón.
Cualquier texto aparecerá encima del fondo.
Si buscas algo similar en xml existe:
android:background
atributo que funciona de la misma manera.
<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" />