2016-03-19 13 views
1

Ich muss wissen, was die beste (und wiederempfohlene) Möglichkeit, eine Material-Schaltfläche (AppCompatButton) mit der neuesten AppCompat (23.2.1 vorerst) zu tönen. Ich hätte mir nie vorstellen können, dass es so frustrierend wäre! Ich habe die meisten Antworten aus here ausprobiert, aber entweder würden sie nicht funktionieren oder mit unerwarteten Ergebnissen arbeiten.Wie tönen Knopf mit der neuesten AppCompat

Ich muss Abwärtskompatibilität zu api> = 9 und nur brauchen die Ripple-Effekt auf> = 21 nichts Besonderes angewendet werden. Also, was ist der beste Weg bis jetzt?

Ich würde mich freuen, wenn Sie sowohl XML und Java-Code bereitstellen könnten.

Antwort

6

Es gibt viele Möglichkeiten, dies zu tun. Mein Favorit ist die folgende:

<Button 
android:id="@+id/activity_main_some_button" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
style="@style/Widget.AppCompat.Button.Colored" 
android:text="This is a button" /> 

Diese automatisch die Schaltfläche mit der Akzentfarbe färbt Sie (hoffentlich) in Ihrem Thema gesetzt, während bei API gedrückt Staaten Aufrechterhaltung < Lollipop und Ripple> = Lollipop.

Wenn nichts anderes funktioniert einfach auf den Button selbst tönen könnte:

AppCompatButton myExampleButton = new AppCompatButton(getContext()); 

myExampleButton.setSupportBackgroundTintList(ContextCompat.getColorStateList(getContext(), 
              R.color.some_color)); 

aktualisieren

Sie können folgende tun, um eine selbst definierte Farbe zu verwenden:

<style name="MyButtonTheme" parent="Widget.AppCompat.Button.Colored"> 
    <item name="colorButtonNormal">@color/someColor</item> 
</style> 

definieren ein neuer Stil mit der gewünschten Farbe.

<Button 
android:id="@+id/activity_main_some_button" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:theme="@style/MyButtonTheme" 
android:text="This is a button" /> 

Legen Sie es auf Ihre Schaltfläche.

+0

Ich möchte nicht die Akzentfarbe verwenden. Nur eine willkürliche Farbe. Wie kann dies von XML aus erfolgen? – ThanosFisherman

+0

@ThanosF Siehe die aktualisierte Antwort. – rubengees

+0

Danke. Das sollte tun – ThanosFisherman