Ich habe Google Design-Support-Bibliothek für Android verwendet. Um Farbe einer Schaltfläche unterscheidet sich von der App Thema einstellen erkläre ich den Knopf in Layout XML-Datei wie folgt:Set buttonColorNormal programmatisch für Android Button mit AppCompat Design-Effekt
<Button
style="@style/Widget.AppCompat.Button.Colored"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:theme="@style/MyButton" />
Und dann die MyButton in styles.xml definieren als
<style name="MyButton" parent="ThemeOverlay.AppCompat">
<item name="colorButtonNormal">@color/my_color</item>
</style>
Dies gibt Ich habe einen Knopf wie in der Design-Support-Bibliothek, mit der Hintergrundfarbe, die mit @color/my_color
in meiner colors.xml-Datei definiert ist.
Daher ist es grundsätzlich android:theme
zu verwenden, um das colorButtonNormal
Attribut zu ändern, um die gewünschte Farbe zu erhalten.
Wie konnte ich das gleiche Ergebnis programmatisch erreichen? Grundsätzlich, wenn ich so etwas wie
myButton.setTheme(R.style.MyButton)
tun könnte ... dann könnte ich die colorButtonNormal
stellen Sie die Ansicht zu erhalten.
Ich kann nicht festgelegt, die es wie
myButton.setBackgroundColor(ContextCompat.getColor(getContext(),R.color.my_color));
oder nicht einmal, wie
ColorStateList colorStateList = ContextCompat.getColorStateList(getActivity(), R.color.my_color);
ViewCompat.setBackgroundTintList(myButton, colorStateList);
Dies wird die Design-Support-Bibliothek Wirkung der Berührung entfernen.
haben Sie versucht, setBackgroundTintList zu verwenden? – JEY
@JEY Folgte dem Dokument, aber es hat nicht funktioniert. Die Frage wurde als Referenz aktualisiert. – Tejas
Die beste Möglichkeit besteht darin, die Schaltfläche programmgesteuert mit einem dieser Konstruktoren zu erstellen: Button (Kontext, AttributSet, int defStyleAttr) Schaltfläche (Kontext AttributSet int defStyleAttr, int defStyleRes) – JEY