Effetto ondulazione su dispositivi pre e Lollipop +
harrane e Liuting hanno ragione. La risposta accettata non è il modo migliore. Fammi mostrare nel codice come cambiare il colore dell'increspatura per le versioni pre-Lollipop e successive
Il tuo AppTheme dovrebbe ereditare da qualsiasi tema AppCompat e contenere l'attributo colorControlHighlight (senza il prefisso "android:")
<!-- Application theme. -->
<style name="AppTheme" parent="@style/Theme.AppCompat.Light.NoActionBar">
<item name="colorControlHighlight">#40ffffff</item>
</style>
La tua visualizzazione dovrebbe contenere clickable = "true" (o dovrebbe avere un listener di clic impostato a livello di programmazione) e lo sfondo dovrebbe essere "? Attr / selectableItemBackgroundBorderless" o "? Attr / selectableItemBackground":
<LinearLayout
...
android:clickable="true"
android:background="?attr/selectableItemBackgroundBorderless"/>
Nota: se la vista genitore ha uno sfondo bianco, non vedrai l'effetto a catena poiché è bianco. Modificare il valore colorControlHighlight per un colore diverso
Inoltre, se desideri diversi colori di ondulazione su diverse attività, puoi impostare un tema personale per ciascuna attività nel file Manifest, ad esempio:
<activity
android:name="com.myapp.GalleryActivity"
android:theme="@style/RedRippleTheme"
/>
Diversi colori di ondulazione per diversi frammenti nella stessa attività?
È possibile modificare gli attributi del tema dell'attività per ogni frammento in runtime. Basta sovrascriverli prima che il frammento venga gonfiato con il tuo stile personalizzato e applicarlo a un tema corrente:
in values / styles.xml
<style name="colorControlHighlight_blue">
<item name="colorControlHighlight">@color/main_blue_alpha26</item>
</style>
Quindi, nel tuo frammento prima dell'inflazione 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;
}
Questo stile funzionerà solo per questo frammento
Colore ondulazione diverso per viste diverse? (Lecca-lecca +)
Puoi cambiare il colore dell'increspatura per ogni vista separatamente usando l'
colorControlHighlight
attributo, non funziona se li applichi direttamente a una vista:
<TextView
...
colorControlHighlight="#40ffffff"/> <!-- DOESN'T WORK -->
dovresti applicarlo come tema:
<TextView
...
android:theme="@style/colorControlHighlight_blue"/>
PS Inoltre, a volte questo approccio aiuta se hai problemi sconosciuti con ondulazione e non riesci a capirlo. Nel mio caso, ho utilizzato una libreria scorrevole di terze parti che ha incasinato gli effetti a catena per l'intero layout e aggiungendo esplicitamente questo tema a tutte le visualizzazioni cliccabili elaborate per me.
colorControlHighlight
invece diandroid:colorControlHighlight
funziona meglio per me, altrimenti è solo per v21 +