Pregunta

Estoy utilizando una Vista de la galería donde la vista correspondiente a cada elemento no es trivial y se compone de texto, así como varios botones.

Cuando hago clic para arrastrar la vista de galería (en algún lugar no en uno de los botones) dibujable cambios de estado del botón para prensado y parece como si todos los botones están siendo presionados actualmente. Además, el mismo comportamiento ocurre para el estado seleccionado (por ejemplo, todo el texto de las TextViews niño cambia de color).

Estoy tratando de prevenir este comportamiento y han encontrado el atributo android: xml duplicateParentState, así como la propiedad setDuplicateParentStateEnabled. Esto parece que debería haber realizado lo que estoy tratando de hacer, pero parece no tener ningún efecto.

¿Alguna idea?

¿Fue útil?

Solución 2

No está seguro de que la propiedad duplicateParentState entra en juego, pero rompiendo las demostraciones de código que nunca se toma en cuenta para los estados seleccionados y prensadas. Me creando una clase vista personalizada y anulando el dispatchSetSelected y dispatchSetPressed métodos.

Otros consejos

Tal vez un poco en el lado tardío, pero después de haber funcionado en este problema por mí mismo hace poco tengo una solución.

dispatchSetSelected y dispatchSetPressed realmente no ayudan aquí, ya que los métodos que realmente necesita para anular son privadas dentro de la galería.

La solución es añadir una disposición adicional (utilicé una subclase de LinearLayout) alrededor de la vista del niño, lo que anula setPressed (booleano) y simplemente lo ignora. Esto evita que el galería de forzar su estado presionado en los niños, al tiempo que permite a los niños a ser activados directamente, y no detener los acontecimientos se propaguen hacia arriba.

Si le sucede a extenderse desde la Galería para crear su propia versión personalizada de ello, sólo tiene que hacer:

  @Override
  public boolean onDown(MotionEvent e) {
    // Ignore onDown events in order to avoid having every child's state set to 'pressed'
    return true;
  }

Esto aún permitirá a los niños de la galería personalizada para recibir correctamente haga clic en eventos y deslizar / arrojando funciona como está previsto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top