Ich verwende die Android v21-Unterstützungsbibliothek.
Ich habe eine Schaltfläche mit benutzerdefinierter Hintergrundfarbe erstellt. Die Materialdesign-Effekte wie Welligkeit und Enthüllung sind verschwunden (mit Ausnahme der Höhe beim Klicken), wenn ich die Hintergrundfarbe verwende.
<Button
style="?android:attr/buttonStyleSmall"
android:background="?attr/colorPrimary"
android:textColor="@color/white"
android:textAllCaps="true"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Button1"
/>
Das Folgende ist eine normale Schaltfläche und die Effekte funktionieren einwandfrei.
<Button
style="?android:attr/buttonStyleSmall"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textAllCaps="true"
android:text="Button1"
/>
android
android-5.0-lollipop
Sathesh
quelle
quelle
Antworten:
Wenn Sie verwenden
android:background
, ersetzen Sie einen Großteil des Stils und des Erscheinungsbilds einer Schaltfläche durch eine leere Farbe.Update: Ab Version 23.0.0 von AppCompat gibt es einen neuen
Widget.AppCompat.Button.Colored
Stil, der Ihre DesignscolorButtonNormal
für die deaktivierte Farbe undcolorAccent
für die aktivierte Farbe verwendet.Auf diese Weise können Sie es direkt über auf Ihre Schaltfläche anwenden
Wenn Sie ein benutzerdefiniertes
colorButtonNormal
oder benötigencolorAccent
, können Sie ein verwenden,ThemeOverlay
wie in erläutert diesem Pro-Tipp undandroid:theme
auf der Schaltfläche .Vorherige Antwort
Sie können ein Drawable in Ihrem v21-Verzeichnis für Ihren Hintergrund verwenden, z.
Dadurch wird sichergestellt, dass Ihre Hintergrundfarbe ist
?attr/colorPrimary
die Standard-Ripple-Animation verwendet und verwendet, wobei die Standardeinstellung verwendet wird?attr/colorControlHighlight
(die Sie auch in Ihrem Design festlegen können, wenn Sie möchten).Hinweis: Sie müssen einen benutzerdefinierten Selektor für weniger als v21 erstellen:
Angenommen, Sie haben einige Farben, die Sie für den Standard-, Druck- und Fokusstatus möchten. Persönlich habe ich einen Screenshot einer Welligkeit auf halbem Weg durch die Auswahl gemacht und den primären / fokussierten Zustand daraus gezogen.
quelle
Es gibt eine weitere einfache Lösung, um benutzerdefinierte Hintergründe für "Flat" -Schaltflächen bereitzustellen und gleichzeitig deren "Material" -Effekte beizubehalten.
dh:
Kann für Flat verwendet werden Schaltflächen verwendet werden, funktioniert unter API> = 11, und Sie erhalten Ripple-Effekte auf> = 21 Geräten, wobei die regulären Schaltflächen auf Pre-21 bleiben, bis AppCompat aktualisiert wird, um auch dort Ripple zu unterstützen.
Sie können selectableItemBackgroundBorderless auch nur für> = 21 Schaltflächen verwenden.
quelle
CardView
Ansatz, danke für das Teilen!Hier ist eine einfache und abwärtskompatible Methode, um erhöhten Tasten mit benutzerdefiniertem Hintergrund einen Welleneffekt zu verleihen.
Ihr Layout sollte so aussehen
quelle
foreground
hat dies vor dem 23. google.com/…Ich bin heute auf dieses Problem gestoßen, als ich tatsächlich mit der v22-Bibliothek gespielt habe.
Angenommen, Sie verwenden Stile, können Sie die
colorButtonNormal
Eigenschaft festlegen, und die Schaltflächen verwenden standardmäßig diese Farbe.Abgesehen davon können Sie immer noch einen Stil für die Schaltfläche erstellen und diesen dann pro Schaltfläche verwenden, wenn Sie eine Auswahl an Farben benötigen (nicht getestet, nur spekuliert).
Denken Sie daran,
android:
vor den Elementnamen in Ihrem v21-Stil hinzuzufügen .quelle
Mit AppCompat (22.1.1+) können Sie einen Stil wie den folgenden hinzufügen:
Und verwenden Sie es, indem Sie einfach den Stil anwenden:
Beim programmgesteuerten Ändern der Farbe stellte ich fest, dass die einzige Möglichkeit zum Aktualisieren der Farbe (unter API 15 oder 16) darin bestand, stattdessen die 'Hintergrundtönungsliste' zu verwenden. Und die schöne radiale Animation auf API 21-Geräten wird nicht entfernt:
Weil
button.setBackground(...)
undbutton.getBackground().mutate().setColorFilter(...)
ändern Sie die Schaltflächenfarbe in API 15 und 16 nicht wie in API 21.quelle
ColorStateList.valueOf( ... )
diese Option , um eine einfacheColorStateList
Farbe mit nur einer Farbe zu erstellen.ViewCompat.setBackgroundTintList(myButton, ColorStateList.valueOf(myColor);
Javadoc fürsetSupportBackgroundTintList
sagt, es sollte so heißen.Die Antwort von @ ianhanniballake ist absolut korrekt und einfach. Aber ich habe ein paar Tage gebraucht, um zu verstehen. Für jemanden, der seine Antwort nicht versteht, ist hier eine detailliertere Implementierung
=== Oder ===
quelle
colorButtonNormal
in das Basisthema schreiben@style/AppTheme
. Dies gibt AppCompat eine Standardfarbe, um die Schaltflächen entsprechend zu färben. Und dann können Sie Ihre Antwort verwenden, um eine Ansicht individuell zu gestalten.android:theme="Theme.MaterialButton"
oderandroid:theme="@style/Theme.MaterialButton"
android:theme="@style/Theme.MaterialButton"
. Vielen Dank für Ihre Richtigkeit.Ich habe den backgroundTint und den Vordergrund verwendet:
quelle
Ich bin zu diesem Beitrag gekommen, um nach einer Möglichkeit zu suchen, eine Hintergrundfarbe von mir zu haben
ListView
Artikel zu erhalten, aber die Welligkeit beizubehalten.Ich habe einfach meine Farbe als Hintergrund und das selectableItemBackground als Vordergrund hinzugefügt:
und es funktioniert wie ein Zauber. Ich denke, die gleiche Technik könnte auch für Knöpfe verwendet werden. Viel Glück :)
quelle
Verwenden Sie
backgroundTint
anstelle vonbackground
quelle
Wenn Sie an ImageButton interessiert sind, können Sie diese einfache Sache ausprobieren:
quelle
v22.1
von einappcompat-v7
paar neue Möglichkeiten vorgestellt. Jetzt ist es möglich, ein bestimmtes Thema nur einer Ansicht zuzuweisen.Anstatt die gewünschte Farbe in einem globalen Thema festzulegen, erstellen wir eine neue und weisen sie nur dem zu
Button
Beispiel:
Und verwenden Sie diesen Stil als Thema Ihrer
Button
quelle
Wenn Sie mit der Verwendung einer Bibliothek eines Drittanbieters einverstanden sind , lesen Sie traex / RippleEffect . Mit nur wenigen Codezeilen können Sie JEDER Ansicht einen Ripple-Effekt hinzufügen . Sie müssen nur das Element, mit dem Sie einen Welleneffekt erzielen möchten, in Ihre XML-Layoutdatei einbinden
com.andexert.library.RippleView
Container .Als zusätzlichen Bonus ist Min SDK 9 erforderlich, damit Sie über alle Betriebssystemversionen hinweg konsistent gestalten können.
Hier ist ein Beispiel aus dem GitHub-Repo der Bibliotheken:
Sie können die Welligkeitsfarbe ändern, indem Sie dieses Attribut dem RippleView-Element hinzufügen:
app:rv_color="@color/my_fancy_ripple_color
quelle
Verwenden
und die Farbe wird auf Pre-Lolipop acept
quelle
In dem großartigen Tutorial von Alex Lockwood werden zwei Ansätze erläutert: http://www.androiddesignpatterns.com/2016/08/coloring-buttons-with-themeoverlays-background-tints.html :
Ansatz 1: Ändern der Hintergrundfarbe der Schaltfläche mit einem ThemeOverlay
Ansatz 2: Festlegen des Hintergrundfarbtons des AppCompatButton
quelle
Programmgesteuertes Anwenden der Farben:
quelle
Ich habe es versucht:
anstatt die Hintergrundeigenschaft zu ändern. Dadurch wird der Materialeffekt nicht beseitigt.
quelle