Galeria/AdaptView Child Drawabable State
-
27-09-2019 - |
Pergunta
Estou usando uma exibição de galeria em que a exibição correspondente a cada item não é trivial e consiste em texto e vários botões.
Quando clico para arrastar a visualização da galeria (em algum lugar que não está em um dos botões), o estado desenhado do botão muda para pressionado e aparece como se todos os botões estivessem sendo pressionados no momento. Além disso, o mesmo comportamento acontece para o estado selecionado (por exemplo, todo o texto das visualizações de texto da criança muda de cor).
Estou tentando impedir esse comportamento e encontrei o atributo XML do Android: DuplicateParentState, bem como a propriedade SetDuplicateParentStateEnabled. Parece que deve realizar o que estou tentando fazer, mas parece não ter efeito.
Alguma ideia?
Solução 2
Não tenho certeza de onde a propriedade DuplicateParentState entra em jogo, mas romper a fonte mostra que ela nunca é levada em consideração para os estados selecionados e pressionados. Eu criava uma classe de exibição personalizada e substituindo os métodos DispatchSetSelected e DispatchSetPressed.
Outras dicas
Talvez um pouco do lado tardio, mas depois de ter encontrado esse problema recentemente, tenho uma correção.
DispatchSetSelected e DispatchSetPressed não ajudam aqui, pois os métodos que você realmente precisa substituir são privados na galeria.
A solução é adicionar um layout extra (usei uma subclasse do linearlayout) em torno da visualização da criança, que substitui o conjunto (booleano) e simplesmente o ignora. Isso impede que a galeria force seu estado prensado nas crianças, enquanto ainda permite que essas crianças sejam ativadas diretamente, e não impedindo que os eventos sejam propagados para cima.
Se você se estender da Galeria para criar sua própria versão personalizada, você pode simplesmente fazer:
@Override
public boolean onDown(MotionEvent e) {
// Ignore onDown events in order to avoid having every child's state set to 'pressed'
return true;
}
Isso ainda permitirá que as crianças da Galeria personalizada recebam adequadamente eventos de cliques e deslizar / arremessar trabalhos como pretendido.