Eu vi algumas perguntas do SO e eles deram alguns métodos possíveis para alcançar o que desejo. Por exemplo:
Use o
colorControlHighlight
atributo em styles.xml.Aqui está meu styles-v21.xml:
<style name="SelectableItemBackground"> <item name="android:colorControlHighlight">#5677FC</item> <item name="android:background">?attr/selectableItemBackground</item> </style>
E meu widget:
<TextView android:id="@+id/tv_take_photo_as_bt" android:layout_width="280dp" android:layout_height="48dp" android:text="@string/act_take_photo" style="@style/SelectableItemBackground"/>
E não funciona. Eu também tentei adicionar
parent="Theme.AppCompat
ao estilo "SelectableItemBackground", ou mudar paracolorControlHighlight(no android: prefix)"
, ou mudar para?android:attr/selectableItemBackground
, nenhum dos dois é útil.Use o
backgroundTint
atributo no layout.Então eu adiciono
android:backgroundTint="#5677FC"
ao meuTextView
. Ainda inútil. Então tentei mudarandroid:backgroundTintMode
parasrc_in
esrc_atop
, e eles nunca fizeram diferença.
Então, como posso alterar a cor da ondulação quando uso ?attr/selectableItemBackground
como plano de fundo. Eu me concentro apenas no Lollipop e acima. Agradeço antecipadamente!
colorControlHighlight
vez deandroid:colorControlHighlight
funciona melhor para mim, caso contrário, é apenas para v21 +clickable="true"
e o efeito cascata funcionará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:')
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":
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:
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
Então, em seu fragmento antes da inflação em
onCreateView()
: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:você deve aplicá-lo como um tema:
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.
fonte
Ele está mostrando um efeito cascata com cores na API +21 e um fundo cinza simples na impressora para API -21. Adicione este estilo:
E configure-o para a vista:
fonte
android:theme
e não o que as pessoas costumam usarstyle
.A resposta aceita está errada.
A maneira correta de usar é aquela que Liuting mencionou no comentário. Use em
colorControlHighlight
vez deandroid:colorControlHighlight
para alterar o padrãocolorControlHighlight
deAppCompat
* Consulte http://android-developers.blogspot.co.uk/2014/10/appcompat-v21-material-design-for-pre.html na seção Temas *
fonte
Use as etapas abaixo:
your_layout.xml
styles.xml
fonte
Este código funciona para mim para criar uma ondulação:
Não encontrei nenhuma maneira de modificar o atributo selectableItemBackground. É por isso que fiz como acima.
fonte
Em tema preto escuro (ou qualquer outro), tente usar como abaixo, primeiro crie
ripple_effect.xml
nadrawable
pasta e adicione o código comoem seguida, defina o plano de fundo para sua visualização Qualquer,
Linear layout, Button, TextView
etc.fonte
Use o atributo foreground como selectableItemBackground e o atributo background como a cor desejada.
fonte
How can I modify ripple color when using ?attr/selectableItemBackground as background?