me quedé atrapado en un problema extraño con Android - Quiero tener un botón que se parece a esto:Android: cómo crear un botón con la imagen y el texto que son a la vez centrado
|-----------------------------------------------------------------------|
| [icon] <5px> [text text text] |
|-----------------------------------------------------------------------|
y el grupo ([icono] < 5px> [texto de texto]) debe estar centrado. Tenga en cuenta que 5px se usa solo como un marcador de posición para cualquier relleno que desee tener entre el icono y el texto
Encontré algunas respuestas aquí que fueron más o menos gravitantes sobre la configuración de un fondo (que no quiero hacer porque tengo otro fondo) o usar la propiedad android: drawableLeft para establecer el icono.
Sin embargo, parece que la documentación del método setCompoundDrawablesWithIntrinsicBounds es un poco engañosa (see here). Indica que la imagen se coloca en el lado izquierdo/derecho/superior/inferior del TEXTO que no es verdadero. El icono se coloca en el lado correspondiente del BOTÓN. Por ejemplo:
Ajuste del androide: drawableLeft propiedad pone el icono en la posición más a la izquierda y me pone esto (con el centro de gravedad):
|-----------------------------------------------------------------------|
| [icon] [text text text] |
|-----------------------------------------------------------------------|
o esto (con la gravedad IZQUIERDA):
|-----------------------------------------------------------------------|
| [icon] [text text text] |
|-----------------------------------------------------------------------|
Ambos son feos como demonios :(
he encontrado una solución que tiene este aspecto:
public static void applyTextOffset(Button button, int buttonWidth) {
int textWidth = (int) button.getPaint().measureText(button.getText().toString());
int padding = (buttonWidth/2) - ((textWidth/2) + Constants.ICON_WIDTH + Constants.ICON_TO_TEXT_PADDING);
button.setPadding(padding, 0, 0, 0);
button.setCompoundDrawablePadding(-padding);
}
Y funciona más o menos, pero no encuentro a mi gusto por las razones siguientes:
- se requiere conocer el ancho botón. Con los botones de tamaño automático, no se conocerá hasta que se realice el diseño real. Google recomienda usar un oyente para conocer el ancho real después de que se realiza el renderizado, pero esto complica enormemente el código.
- Siento que estoy tomando la responsabilidad de diseño del motor de diseño Android
¿No hay una solución más elegante?
esperanza para que usted había resuelto el problema – Ishu