Stato disegnabile figlio Gallery/AdapterView
-
27-09-2019 - |
Domanda
Sto utilizzando una visualizzazione Galleria in cui la visualizzazione corrispondente a ciascun elemento non è banale ed è composta da testo e da più pulsanti.
Quando faccio clic per trascinare la visualizzazione della raccolta (da qualche parte non su uno dei pulsanti), lo stato disegnabile del pulsante cambia in premuto e appare come se tutti i pulsanti fossero attualmente premuti.Inoltre, lo stesso comportamento si verifica per lo stato selezionato (ad es.tutto il testo del TextViews figlio cambia colore).
Sto cercando di impedire questo comportamento e ho trovato l'attributo xml android:duplicateParentState e la proprietà setDuplicateParentStateEnabled.Sembra che dovrebbe realizzare ciò che sto cercando di fare, ma sembra non avere alcun effetto.
Qualche idea?
Soluzione 2
Non so dove la proprietà duplicateParentState entra in gioco, ma rompendo gli spettacoli di origine che non è mai presa in considerazione per gli stati selezionati e pressati. Vorrei per creare una classe di visualizzazione personalizzata e sovrascrivendo il dispatchSetSelected e dispatchSetPressed metodi.
Altri suggerimenti
Forse un po' tardi, ma avendo riscontrato questo problema di recente, ho una soluzione.
dispatchSetSelected e dispatchSetPressed non sono di grande aiuto in questo caso, poiché i metodi che devi effettivamente sovrascrivere sono privati all'interno di Gallery.
La soluzione è aggiungere un layout aggiuntivo (ho usato una sottoclasse di LinearLayout) attorno alla vista figlio, che sovrascrive setPressed(boolean) e semplicemente lo ignora.Ciò impedisce alla galleria di forzare il suo stato premuto sui bambini, consentendo comunque a tali bambini di essere attivati direttamente e non impedendo la propagazione degli eventi verso l'alto.
Se vi capita di estendersi dalla Galleria per creare la propria versione personalizzata di esso, si può semplicemente fare:
@Override
public boolean onDown(MotionEvent e) {
// Ignore onDown events in order to avoid having every child's state set to 'pressed'
return true;
}
Questo consentirà ancora figli della galleria personalizzato per ricevere correttamente cliccare eventi, e strisciando / buttando funziona come previsto.