Ripple-Effekt auf Pre- und Lollipop + -Geräten
Harrane und Liuting haben recht. Die akzeptierte Antwort ist nicht der beste Weg. Lassen Sie mich im Code zeigen, wie Sie die Welligkeitsfarbe für Versionen vor Lollipop und höher ändern können
Ihr AppTheme sollte von jedem AppCompat-Design erben und das colorControlHighlight-Attribut enthalten (ohne Präfix 'android:').
<!-- Application theme. -->
<style name="AppTheme" parent="@style/Theme.AppCompat.Light.NoActionBar">
<item name="colorControlHighlight">#40ffffff</item>
</style>
Ihre Ansicht sollte clickable = "true" enthalten (oder einen programmgesteuerten Klick-Listener haben) und der Hintergrund sollte "? Attr / selectableItemBackgroundBorderless" oder "? Attr / selectableItemBackground" sein:
<LinearLayout
...
android:clickable="true"
android:background="?attr/selectableItemBackgroundBorderless"/>
Hinweis: Wenn Ihre übergeordnete Ansicht einen weißen Hintergrund hat, wird kein Welligkeitseffekt angezeigt, da dieser weiß ist. Ändern Sie den colorControlHighlight-Wert für eine andere Farbe
Wenn Sie für verschiedene Aktivitäten unterschiedliche Wellenfarben wünschen, können Sie für jede Aktivität in der Manifest-Datei ein persönliches Thema festlegen, z. B.:
<activity
android:name="com.myapp.GalleryActivity"
android:theme="@style/RedRippleTheme"
/>
Unterschiedliche Wellenfarben für unterschiedliche Fragmente in derselben Aktivität?
Sie können die Attribute des Aktivitätsthemas für jedes Fragment zur Laufzeit ändern. Überschreiben Sie sie einfach, bevor das Fragment mit Ihrem benutzerdefinierten Stil aufgeblasen wurde, und wenden Sie es auf ein aktuelles Thema an:
in values / styles.xml
<style name="colorControlHighlight_blue">
<item name="colorControlHighlight">@color/main_blue_alpha26</item>
</style>
Dann in Ihrem Fragment vor der Inflation in onCreateView()
:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
getContext().getTheme().applyStyle(R.style.colorControlHighlight_blue, true); //blue ripple color
View view = inflater.inflate(R.layout.my_fragment_layout, container, false);
return view;
}
Dieser Stil funktioniert nur für dieses Fragment
Unterschiedliche Welligkeitsfarbe für unterschiedliche Ansichten? (Lutscher +)
Sie können die Welligkeitsfarbe für jede Ansicht separat mithilfe eines colorControlHighlight
Attributs ändern. Dies
funktioniert nicht, wenn Sie sie direkt auf eine Ansicht anwenden:
<TextView
...
colorControlHighlight="#40ffffff"/> <!-- DOESN'T WORK -->
Sie sollten es als Thema anwenden:
<TextView
...
android:theme="@style/colorControlHighlight_blue"/>
PS Manchmal hilft dieser Ansatz auch, wenn Sie unbekannte Probleme mit der Welligkeit haben und diese nicht herausfinden können. In meinem Fall habe ich die Sliding Lib von Drittanbietern verwendet, die die Welligkeitseffekte für das gesamte Layout durcheinander gebracht und dieses Thema explizit zu allen für mich erarbeiteten anklickbaren Ansichten hinzugefügt hat.
colorControlHighlight
stattandroid:colorControlHighlight
funktioniert besser für mich, sonst ist es nur für v21 +