Ich erstelle dynamisch Schaltflächen. Ich habe sie zuerst mit XML gestylt und versuche, das folgende XML zu verwenden und es programmatisch zu machen.
<Button
android:id="@+id/buttonIdDoesntMatter"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:text="buttonName"
android:drawableLeft="@drawable/imageWillChange"
android:onClick="listener"
android:layout_width="fill_parent">
</Button>
Das habe ich bisher. Ich kann alles außer dem Zeichnen.
linear = (LinearLayout) findViewById(R.id.LinearView);
Button button = new Button(this);
button.setText("Button");
button.setOnClickListener(listener);
button.setLayoutParams(
new LayoutParams(
android.view.ViewGroup.LayoutParams.FILL_PARENT,
android.view.ViewGroup.LayoutParams.WRAP_CONTENT
)
);
linear.addView(button);
drawableLeft
. Ich habe Ihre Vorschläge hier versucht, ein "verbotenes Symbol" festzulegen, wenn Sie in einen Ordner ohne Leseberechtigung klicken, und es funktioniert. Wenn Sie jedoch den Ordner wechseln und der Adapter neu geladen wird, bleibt das verbotene Symbol bestehen (dh es wirddrawableLeft
nicht neu gezeichnet). Wissen Sie, wie Sie sichnotifyDataSetChanged
auch für die bewerben könnendrawableLeft
, ohne eine Schleife zu machen? Vielen Dank!Listview
Elements, wenn sich die Daten ändern - was sich nicht wirklich auf diese Frage oder Antwort bezieht. Ich schlage vor, Sie posten eine Frage anstelle eines Kommentars.setCompoundDrawablesWithIntrinsicBounds( 0, 0, R.drawable.money, 0 )
funktioniert nicht, wenn ich das drawableRight in der layout.xml definiere. Wenn ich das ursprüngliche Symbol im Inneren einstelleonCreate()
, funktioniert die Änderung. Könnte es mit API 19 zusammenhängen?Einfach können Sie dies auch versuchen
quelle
• •
Kotlin Version
Verwenden Sie das folgende Snippet, um der Schaltfläche ein Zeichenelement hinzuzufügen:
.
• •
Important Point in Using Android Vector Drawable
Wenn Sie einen Android-Vektor zum Zeichnen verwenden und eine Abwärtskompatibilität für API unter 21 wünschen , fügen Sie die folgenden Codes hinzu:
In App-Ebene
build.gradle
:In der Anwendungsklasse:
quelle
Context#.getDrawable(resId)
veraltet, sodass die Verwendung einige Probleme verursachen kann.Bei mir hat es geklappt:
quelle
quelle
Ich war das:
quelle
Wenn Sie drawableStart , drawableEnd , drawableTop oder drawableBottom verwenden ; Sie müssen " setCompoundDrawablesRelativeWithIntrinsicBounds " verwenden.
quelle
Hat für mich gearbeitet. Zum Zeichnen rechts einstellbar
quelle
Wie @ Jérémy Reynaud darauf hinweist, wie in dieser Antwort beschrieben , besteht die sicherste Möglichkeit, das linke Zeichenelement festzulegen, ohne die Werte der anderen Zeichenelemente (oben, rechts und unten) zu ändern, darin, die vorherigen Werte über die Schaltfläche mit setCompoundDrawablesWithIntrinsicBounds zu verwenden :
So bleiben alle Ihre vorherigen Zeichen erhalten.
quelle
Im Folgenden wird beschrieben, wie Sie die Farbe des linken Symbols im Bearbeitungstext ändern und auf der linken Seite festlegen können.
quelle
Könnte hilfreich sein:
quelle
Fügen Sie eine Kotlin-Erweiterung hinzu
Wenn Sie dies häufig tun, wird Ihr Code durch Hinzufügen einer Erweiterung besser lesbar. Die Schaltfläche erweitert TextView. Verwenden Sie die Schaltfläche, wenn Sie enger sein möchten.
Um die Nebenstelle zu nutzen, rufen Sie einfach an
Übergeben Sie bei jedem Löschen keinen Parameter und lassen Sie keine andere Erweiterung namens aufrufen
removeDrawables
quelle
Versuche dies:
quelle
Versuche dies:
quelle