sono rimasto bloccato in un numero dispari con Android - voglio avere un pulsante che assomiglia a questo:Android: come creare un pulsante con immagine e testo che sono entrambi centrati
|-----------------------------------------------------------------------|
| [icon] <5px> [text text text] |
|-----------------------------------------------------------------------|
e il gruppo ([icona] < 5px> [testo testo testo]) dovrebbe essere centrato. Notare che 5px è usato solo come segnaposto per qualsiasi padding che si desidera avere tra l'icona e il testo
Ho trovato qui alcune risposte che erano più o meno gravitanti attorno ad entrambi impostando uno sfondo (che non voglio fare perché ho un altro background) o utilizzare la proprietà android: drawableLeft per impostare l'icona.
Tuttavia sembra che la documentazione del metodo setCompoundDrawablesWithIntrinsicBounds sia un po 'ingannevole (see here). Indica che l'immagine è posizionata sul lato sinistro/destro/alto/basso del TEXT che non è vero. L'icona è posizionata sul lato corrispondente del BUTTON. Per esempio:
Impostazione del android: drawableLeft proprietà mette l'icona sulla posizione più a sinistra e mi fa questo (con centro di gravità):
|-----------------------------------------------------------------------|
| [icon] [text text text] |
|-----------------------------------------------------------------------|
o del presente (con la gravità SINISTRA):
|-----------------------------------------------------------------------|
| [icon] [text text text] |
|-----------------------------------------------------------------------|
Entrambi sono brutto come l'inferno :(
ho trovato una soluzione che assomiglia a questo:
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);
}
E funziona più o meno, ma io non lo trovo di mio gradimento per le seguenti ragioni:
- si richiede di conoscere la larghezza tasto. Con i pulsanti di dimensioni automatiche non sarà noto fino a quando non verrà eseguito il layout effettivo. Google consiglia di utilizzare un listener per apprendere la larghezza effettiva dopo il rendering, ma ciò complica enormemente il codice.
- mi sento come sto prendendo la responsabilità layout dal motore di layout di Android
non c'è una soluzione più elegante?
Speranza in modo da aveste risolto problema – Ishu