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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top