Ich versuche, die Hintergrundfarbe einer Schaltfläche in meiner App festzulegen, und ich kann nicht das gewünschte Ergebnis erzielen ...
Die Farbe, die ich versuche zu setzen, ist holo_green_light(#ff99cc00)
. Um dies zu tun, verwende ich setColorFilter(0xff99cc00, PorterDuff.Mode.MULTIPLY);
Die Farbe, die ich bekomme, ist nicht der holo_green_light
, sondern eine Mischung aus hellgrauem und holo_green_light
.
Ich habe versucht, die LightingColorFilter
ohne großen Erfolg zu verwenden.
Gibt es eine Möglichkeit, es programmgesteuert auszuführen, so dass die Schaltfläche als Schaltfläche und nicht als flaches Rechteck mit der Farbe angezeigt wird, die ich brauche.
Schaltflächen sind komplexer als nur eine Farbe zu ändern ...
Android-Buttons werden mit einer Reihe von 9 Patches und State Draws erstellt. Sie sollten einen Blick auf Android Holo Colors werfen, um diese zu generieren. Wählen Sie "Color Button" aus, um die erforderlichen Bilder und XML-Dateien für Sie zu generieren ...
Dies ist meine Art, benutzerdefinierte Buttons mit verschiedenen Farben zu machen
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android" >
<stroke Android:width="3dp"
Android:color="#80FFFFFF" />
<corners Android:radius="25dp" />
<gradient Android:angle="270"
Android:centerColor="#90150517"
Android:endColor="#90150517"
Android:startColor="#90150517" />
</shape>
Auf diese Weise stellen Sie den Hintergrund ein.
<Button Android:id="@+id/button"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="Button"
Android:layout_marginBottom="25dp"
Android:layout_centerInParent="true"
Android:background="@drawable/button"/>
Wenn es Ihnen nichts ausmacht, es zu codieren, können Sie dies ~> Android: background = "# eeeeee" tun und jede beliebige Hex-Farbe # fallen lassen.
Sieht aus wie das....
<Button
Android:id="@+id/button1"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignParentLeft="true"
Android:layout_alignParentRight="true"
Android:layout_below="@+id/textView1"
Android:text="@string/ClickMe"
Android:background="#fff"/>
Wenn Sie den allgemeinen Stil beibehalten möchten (abgerundete Ecken usw.) und nur die Hintergrundfarbe ändern möchten, verwende ich die backgroundTint-Eigenschaft
Android:backgroundTint="@Android:color/holo_green_light"
Erstellen Sie /res/drawable/button.xml
mit folgendem Inhalt:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:shape="rectangle" Android:padding="10dp">
<!-- you can use any color you want I used here gray color-->
<solid Android:color="#90EE90"/>
<corners
Android:bottomRightRadius="3dp"
Android:bottomLeftRadius="3dp"
Android:topLeftRadius="3dp"
Android:topRightRadius="3dp"/>
</shape>
Und dann können Sie Folgendes verwenden:
<Button
Android:id="@+id/button_save_prefs"
Android:text="@string/save"
Android:background="@drawable/button"/>
Das muss kein Hardcore sein.
Versuche dies :
YourButtonObject.setBackground(0xff99cc00);
Warum nicht einfach setBackgroundColor(getResources().getColor(R.color.holo_light_green))
verwenden?
Bearbeiten: Wenn Sie etwas haben möchten, das eher wie eine Android-Schaltfläche aussieht, möchten Sie einen Farbverlauf erstellen und als Hintergrund festlegen. Für ein Beispiel können Sie diese Frage auschecken.
Neben der Antwort von Mark Proctor:
Wenn Sie den Standardstil beibehalten möchten, die Schaltfläche jedoch mit einer bedingten Farbe versehen ist, legen Sie die backgroundTint
-Eigenschaft wie folgt fest:
Android:backgroundTint="@drawable/styles_mybutton"
Erstellen Sie die zugehörige Datei /res/drawable/styles_mybutton.xml, verwenden Sie dann die folgende Vorlage und ändern Sie die Farben nach Ihrem Geschmack:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<!-- Disabled state-->
<item Android:state_enabled="false"
Android:color="@Android:color/white">
</item>
<!-- Default state-->
<item
Android:color="#cfc">
</item>
</selector>
Um den Stil beizubehalten, verwenden Sie:
int color = Color.parseColor("#99cc00");
button.getBackground().mutate().setColorFilter(new PorterDuffColorFilter(color, PorterDuff.Mode.SRC));