ich in einem ungeraden Problem mit Android stecken geblieben - Ich mag einen Knopf haben, die wie folgt aussieht:Android: wie eine Schaltfläche mit Bild und Text erstellen, die sowohl zentriert sind
|-----------------------------------------------------------------------|
| [icon] <5px> [text text text] |
|-----------------------------------------------------------------------|
und die Gruppe ([icon] < 5px> [Texttext] sollte zentriert werden. Beachten Sie, dass 5px nur als Platzhalter für alle Abstände verwendet wird, die Sie zwischen dem Symbol und dem Text haben möchten. Ich habe hier einige Antworten gefunden, die mehr oder weniger um einen Hintergrund herumlagen (was ich nicht möchte) tun, weil ich einen anderen Hintergrund habe) oder die Eigenschaft android: drawableLeft verwenden, um das Icon zu setzen.
Allerdings sieht die Dokumentation der setCompoundDrawablesWithIntrinsicBounds-Methode ist ein bisschen irreführend (see here). Es besagt, dass das Bild auf der linken/rechten/oberen/unteren Seite des TEXT platziert wird, was nicht wahr ist. Das Symbol befindet sich auf der entsprechenden Seite der Schaltfläche. Zum Beispiel:
Einstellen des Android: drawableLeft Eigenschaft legt das Symbol auf dem die meisten linken Position und wird mir diese (mit Schwerpunkt):
|-----------------------------------------------------------------------|
| [icon] [text text text] |
|-----------------------------------------------------------------------|
oder diese (mit der Schwerkraft links):
|-----------------------------------------------------------------------|
| [icon] [text text text] |
|-----------------------------------------------------------------------|
Beide sind hässlich wie die Hölle :(
ich eine Abhilfe gefunden, die wie folgt aussieht:
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);
}
Und es funktioniert mehr oder weniger, aber ich es nicht aus folgenden Gründen nach meinem Geschmack finden:
- es erfordert die Schaltfläche Breite kennen. Mit automatisch skalierten Tasten ist es nicht bekannt, bis das Layout fertig ist. Google empfiehlt, einen Listener zu verwenden, um die tatsächliche Breite nach dem Rendern zu erfahren, aber dies erschwert den Code immens.
- Ich fühle mich wie ich über das Layout Verantwortung aus dem Android-Layout-Engine nehme
Gibt es eine elegantere Lösung?
Hoffnung, so dass Sie Sie Problem – Ishu