Estoy tratando de tener una imagen (como fondo) en un botón y agregar dinámicamente, dependiendo de lo que ocurra durante el tiempo de ejecución, algo de texto sobre / 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 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 conoce una solución o al menos algunos consejos para comenzar?
Respuestas:
Puede llamar
setBackground()
a aButton
para establecer el fondo del botón.Cualquier texto aparecerá sobre el fondo.
Si está buscando algo similar en xml hay:
android:background
atributo que funciona de la misma manera.fuente
Para los usuarios que solo desean poner Fondo, Imagen de icono y Texto en uno
Button
de diferentes archivos: Establecer en unButton
fondo, dibujable Superior / Inferior / Derecho / Izquierdo y atributos de relleno .Para un arreglo más sofisticado, también puede usar
RelativeLayout
(o cualquier otro diseño) y 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
fuente
b.setCompoundDrawablesWithIntrinsicBound(null,R.drawable.home_icon_test,null,null)
lugar deandroid:drawableTop
y enb.setPadding(0,32,0,0)
lugar deandroid:paddingTop
.Hay una solución mucho mejor para este problema.
Simplemente tome una normalidad
Button
y usedrawableLeft
losgravity
atributos y.De esta forma, obtienes un botón que muestra un icono en el lado izquierdo del botón y el texto en el sitio derecho del icono centrado verticalmente .
fuente
fuente
Solo use un LinearLayout y pretenda que es una
Button
configuración : la clave es hacer clicbackground
y hacer clicfuente
android:onClick
a su punto de vistasolo reemplace
con
izz un muy buen truco ..;)
fuente
Tomé un enfoque diferente de los que se indican aquí, y está funcionando muy bien, así que quería compartirlo.
Estoy usando un estilo para crear un botón personalizado con imagen a la izquierda y texto en el centro-derecha. Simplemente siga los 4 "pasos fáciles" a continuación:
I. Cree sus 9 parches usando al menos 3 archivos PNG diferentes y la herramienta que tiene en: /YOUR_OWN_PATH/android-sdk-mac_x86/tools/./draw9patch. Después de esto deberías tener:
button_normal.9.png, button_focused.9.png y button_pressed.9.png
Luego, descargue o cree un icono PNG 24x24.
ic_your_icon.png
Guarde todo en la carpeta dibujable / en su proyecto de Android.
II Cree un archivo XML llamado button_selector.xml en su proyecto en la carpeta / dibujable. Los estados deberían ser así:
III. Vaya a la carpeta valores / y abra o cree el archivo styles.xml y cree el siguiente código XML:
ButtonNormalTextWithIcon es un "estilo secundario" porque está extendiendo ButtonNormalText (el "estilo principal").
Tenga en cuenta que al cambiar drawableLeft en el estilo ButtonNormalTextWithIcon a drawableRight, drawableTop o drawableBottom, puede colocar el icono en otra posición con respecto al texto.
IV. Vaya al diseño / carpeta donde tiene su XML para la interfaz de usuario y vaya al botón donde desea aplicar el estilo y haga que se vea así:
¡Y voilá! Tienes tu botón con una imagen en el lado izquierdo.
¡Para mí, esta es la mejor manera de hacerlo! porque al hacerlo de esta manera, puede administrar el tamaño del texto del botón por separado del icono que desea mostrar y usar el mismo fondo dibujable para varios botones con diferentes iconos respetando las Directrices de la interfaz de usuario de Android usando estilos.
También puede crear un tema para su aplicación y agregarle el "estilo principal" para que todos los botones se vean iguales, y aplicar el "estilo secundario" con el ícono solo donde lo necesite.
fuente
fuente
Puede usar
drawableTop
(tambiéndrawableLeft
, etc.) para la imagen y establecer el texto debajo de la imagen agregando elgravity
left|center_vertical
fuente
Actualización importante
Para vector dibujable
Si está utilizando vectores dibujables, entonces debe
Fue lanzado en versión
1.1.0-alpha01
, por lo que la versión de appcompat debería ser al menos1.1.0-alpha01
. La última versión actual es1.1.0-alpha02
, use las últimas versiones para una mejor confiabilidad, vea las notas de la versión - enlace .Usar
AppCompatTextView
/AppCompatButton
/AppCompatEditText
app:drawableLeftCompat
,app:drawableTopCompat
,app:drawableRightCompat
,app:drawableBottomCompat
,app:drawableStartCompat
yapp:drawableEndCompat
Para dibujable regular
Si no necesita un vector dibujable, entonces puede
android:drawableLeft
,android:drawableRight
,android:drawableBottom
,android:drawableTop
TextView
,Button
yEditText
oAppCompat
clases.Puede lograr la salida como a continuación:
fuente
xmlns:app="http://schemas.android.com/apk/res-auto"
espacio de nombres y no veo esas cosas compatibles con la aplicación.For vector drawable
punto nuevamente.Probablemente mi solución se adapte a muchos usuarios, eso espero.
Lo que estoy sugiriendo es hacer TextView con tu estilo. Me funciona perfectamente y tiene todas las funciones, como un botón.
En primer lugar, hagamos un estilo de botón, que puede usar en todas partes ... Estoy creando button_with_hover.xml
En segundo lugar, vamos a crear un botón de vista de texto.
Y este es un resultado. Luego, diseñe su botón personalizado con cualquier color u otras propiedades y márgenes. Buena suerte
fuente
http://www.mokasocial.com/2010/04/create-a-button-with-an-image-and-text-android/
fuente
Este código me funciona perfectamente
fuente
Puedes usar esto:
en el que he puesto una imagen
background
y también he añadido texto ..!fuente
O puedes programáticamente:
fuente
fuente