Ich habe einige Schaltflächen wie diese in meiner App:
<Button
android:id="@+id/bSearch"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="16dp"
android:text="Search"
android:textSize="24sp" />
Ich versuche, dieselbe Schaltfläche mit Text und einem Symbol zu erstellen. android: drawableLeft funktioniert bei mir nicht (Vielleicht würde es funktionieren, aber ich weiß nicht, wie ich eine maximale Höhe für das Symbol festlegen soll).
Also habe ich ein LinearLayout mit einer ImageView und einer TextView erstellt und es wie eine Schaltfläche wirken lassen:
<LinearLayout
android:id="@+id/bSearch2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@android:drawable/btn_default"
android:clickable="true"
android:padding="16dp"
android:orientation="horizontal" >
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginLeft="5dp"
android:adjustViewBounds="true"
android:maxHeight="30dp"
android:maxWidth="30dp"
android:scaleType="fitCenter"
android:src="@drawable/search_icon" />
<TextView
android:id="@+id/tvSearchCaption"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:textSize="24sp"
android:paddingRight="30dp"
android:gravity="center"
android:text="Search" />
</LinearLayout>
Meine neue Schaltfläche ist genau das, was ich will (Schriftgröße, Symbol und Textplatzierung). Aber es sieht nicht nach meinen Standardschaltflächen aus:
Also habe ich versucht, den Hintergrund und die Textfarbe meines neuen Buttons zu ändern:
Button Search = (Button) findViewById(R.id.bSearch);
LinearLayout bSearch2 = (LinearLayout) findViewById(R.id.bSearch2);
bSearch2.setBackground(bSearch.getBackground());
TextView tvSearchCaption = (TextView)findViewById(R.id.tvSearchCaption);
tvSearchCaption.setTextColor(bSearch.getTextColors().getDefaultColor());
Dies führt zu einem seltsamen Ergebnis, mein alter Knopf wird durcheinander gebracht:
Wenn ich die Reihenfolge dieser beiden Schaltflächen im XML ändere, sodass die "neue Schaltfläche" zuerst angezeigt wird, ergibt sich ein weiteres seltsames Ergebnis:
Jetzt ist mir aufgefallen, dass beim Versuch, den alten Knopf zu drücken, der neue gedrückt wird.
Irgendwelche Ideen?
Um links, rechts, oben oder unten ein Bild hinzuzufügen, können Sie folgende Attribute verwenden:
Der Beispielcode ist oben angegeben. Sie können dies auch mithilfe des relativen Layouts erreichen.
quelle
android:drawableStart
anstelle von links undandroid:drawableEnd
anstelle von rechts.Für alle, die dies dynamisch tun möchten,
setCompoundDrawables(Drawable left, Drawable top, Drawable right, Drawable bottom)
hilft das Objekt auf den Schaltflächen.Stichprobe
quelle
Das ist was du wirklich willst.
quelle
Sie können die Materialkomponentenbibliothek und die
MaterialButton
Komponente verwenden.Verwenden Sie die Attribute
app:icon
undapp:iconGravity="start"
.Etwas wie:
quelle
Die Antwort von @Liem Vo ist richtig, wenn Sie android.widget.Button ohne Überschreiben verwenden. Wenn Sie Ihr Thema mit MaterialComponents überschreiben, wird das Problem dadurch nicht behoben.
Also wenn du bist
Verwenden Sie den Parameter app: icon .
quelle