Estou tentando adicionar o efeito Ripple ao item do RecyclerView. Eu dei uma olhada online, mas não consegui encontrar o que preciso. Presumo que seja um efeito personalizado. Eu tentei o atributo android: background no próprio RecyclerView e configurei-o como "? Android: selectableItemBackground", mas não funcionou .:
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:focusable="true"
android:clickable="true"
android:background="?android:selectableItemBackground"
android:id="@+id/recyclerView"
android:layout_below="@+id/tool_bar"/>
Este é o RecyclerView ao qual estou tentando adicionar o efeito:
android
android-animation
android-recyclerview
Georgi Koemdzhiev
fonte
fonte
CardView
naquela questão que não pertencem a esta questão mais geral.Respostas:
Eu descobri. A única coisa que tive que fazer foi adicionar este atributo:
ao elemento raiz do layout que meu adaptador RecyclerView infla assim:
Resultado:
Se você ainda não conseguir ver o efeito de ondulação, adicione essas linhas também ao elemento raiz do layout.
fonte
android:foreground="?android:attr/selectableItemBackground"
android:clickable="true"
também para fazer este trabalhoComo já respondido, a solução mais simples é apenas adicionar um dos seguintes como
RecyclerView
plano de fundo da linha:android:background="?android:attr/selectableItemBackground"
android:background="?attr/selectableItemBackground"
No entanto, se você estiver tendo problemas com esse método ou se quiser um controle mais preciso sobre as cores, faça o seguinte.
Efeito de ondulação personalizado
Esta resposta começa com este exemplo simples do Android RecyclerView . Será semelhante à imagem a seguir.
Adicionar seletor para dispositivos pré API 21
Antes da API 21 (Android 5.0 Lollipop), clicar em um
RecyclerView
item apenas alterava sua cor de fundo (sem efeito cascata). Isso é o que vamos fazer também. Se você ainda tem usuários com esses dispositivos, eles estão acostumados com esse comportamento, então não vamos nos preocupar muito com eles. (Claro, se você realmente quiser o efeito cascata para eles também, você pode usar uma biblioteca personalizada .)Clique com o botão direito na
res/drawable
pasta e escolha Novo> Arquivo de recursos Drawable . Liguecustom_ripple
. Clique em OK e cole o código a seguir.custom_ripple.xml
Usei
colorAccent
como cor de destaque para o estado pressionado porque já estava disponível, mas você pode definir a cor que quiser.Adicionar efeito Ripple para dispositivos API 21+
Clique com o botão direito na
res/drawable
pasta e escolha Novo> Arquivo de recursos Drawable . Liguecustom_ripple
novamente. Não clique em OK, ainda desta vez. Na lista de qualificadores disponíveis, escolha Versão , clique no botão >> e escreva21
para o nível de API da plataforma . Agora clique em OK e cole o código a seguir.v21 / custom_ripple.xml
Novamente, usei
colorAccent
para a cor ondulada porque ela estava disponível, mas você pode usar a cor que quiser. A máscara limita o efeito de ondulação apenas ao layout da linha. A cor da máscara aparentemente não importa, então usei apenas um branco opaco.Definir como plano de fundo
No layout raiz do seu item RecyclerView, defina o plano de fundo para a ondulação personalizada que criamos.
No projeto de exemplo com o qual começamos, é assim:
Acabado
É isso aí. Você deve conseguir executar seu projeto agora. Obrigado a esta resposta e este vídeo do YouTube para obter ajuda.
fonte
Acho que há um pequeno detalhe que está faltando.
Se você ainda não obtiver o efeito cascata após adicionar,
android:background="?android:attr/selectableItemBackground"
tente adicionar as seguintes linhas na raiz do layout.Isso garantirá que a visualização seja clicável e permitirá o efeito cascata com o atributo de fundo mencionado acima
fonte
adicione estas linhas na visualização da raiz xml do adaptador
fonte
Uma abordagem simples e personalizada é definir um tema de visualização conforme descrito aqui .
some_view.xml
some_style.xml
Outras implementações personalizadas podem ser encontradas aqui .
fonte
Usando um estilo de botão
Isso tem funcionado para mim incontáveis.
Adicione o Estilo de botão sem borda ao elemento raiz do seu layout. Não há necessidade de atributos
focusable
ouclickable
, o estilo padrão encapsula tudo isso para você.fonte