Efeito ondulação em dispositivos pré e Lollipop +
Harrane e Liuting estão certos. A resposta aceita não é a melhor maneira. Deixe-me mostrar no código como alterar a cor ondulada para versões pré-Lollipop e superiores
Seu AppTheme deve herdar de qualquer tema AppCompat e conter o atributo colorControlHighlight (sem o prefixo 'android:')
<!-- Application theme. -->
<style name="AppTheme" parent="@style/Theme.AppCompat.Light.NoActionBar">
<item name="colorControlHighlight">#40ffffff</item>
</style>
Sua visualização deve conter clickable = "true" (ou deve ter um listener de cliques definido de forma programática) e o fundo deve ser "? Attr / selectableItemBackgroundBorderless" ou "? Attr / selectableItemBackground":
<LinearLayout
...
android:clickable="true"
android:background="?attr/selectableItemBackgroundBorderless"/>
Observação: se sua visualização pai tiver fundo branco, você não verá o efeito cascata, pois é branco. Altere o valor colorControlHighlight para uma cor diferente
Além disso, se você deseja cores onduladas diferentes em atividades diferentes, pode definir o tema pessoal para cada atividade no arquivo Manifest, por exemplo:
<activity
android:name="com.myapp.GalleryActivity"
android:theme="@style/RedRippleTheme"
/>
Cores onduladas diferentes para fragmentos diferentes na mesma atividade?
Você pode alterar os atributos do Tema de atividade para cada fragmento em tempo de execução. Basta substituí-los antes que o fragmento seja inflado com seu estilo personalizado e aplique a um Tema atual:
em valores / estilos.xml
<style name="colorControlHighlight_blue">
<item name="colorControlHighlight">@color/main_blue_alpha26</item>
</style>
Então, em seu fragmento antes da inflação em 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;
}
Este estilo funcionará apenas para este fragmento
Cor ondulada diferente para visualizações diferentes? (Lollipop +)
Você pode alterar a cor da ondulação para cada visualização separadamente usando o
colorControlHighlight
atributo. Não funcionará se você aplicá-los diretamente a uma visualização:
<TextView
...
colorControlHighlight="#40ffffff"/> <!-- DOESN'T WORK -->
você deve aplicá-lo como um tema:
<TextView
...
android:theme="@style/colorControlHighlight_blue"/>
PS Além disso, às vezes essa abordagem ajuda se você tiver problemas desconhecidos com o ripple e não conseguir descobrir. No meu caso, usei a biblioteca deslizante de terceiros, que bagunçou os efeitos de ondulação para todo o layout e adicionei explicitamente esse tema a todas as visualizações clicáveis que funcionou para mim.
colorControlHighlight
vez deandroid:colorControlHighlight
funciona melhor para mim, caso contrário, é apenas para v21 +