Esto me confunde:
Por lo que he leído, una vista con setVisibility (View.GONE); no debería recibir más eventos de toque o clic. Mi diseño tiene dos partes, que serán visibles o desaparecerán de modo que solo una de ellas sea visible y utilizable a la vez, pero View.GONE no funciona. No puedo ver la vista GONE, como se esperaba, pero aún así reacciona a onClick (y consume el evento que debería obtener la otra vista).
¿Me puedes ayudar?
Quizás sea de interés: cuando comienzo mi proyecto, una vista se ha APAGADO, la otra es visible. Esta vez funcionará como se esperaba (la vista GONE básicamente se ignora), pero después de configurar View.GONE a través del código, dejará de funcionar.
android
view
onclick
visibility
ShadowMare
fuente
fuente
hierarchyviewer
herramienta para inspeccionar el estado de su jerarquía de vistas en tiempo de ejecución. Esto le permitirá ver el estado de visibilidad y mucho más al depurar problemas de vista.Respuestas:
¿Quizás usa animaciones para mostrar / ocultar las vistas? Obtengo este comportamiento cuando uso animaciones que tienen android: fillEnabled = "true" android: fillAfter = "true" No lo entiendo, y parece un error - si uso animaciones sin fillEnabled / fillAfter, todo funciona como se esperaba. ..
fuente
code @Override public void onAnimationEnd(Animation animation) { /* Android will make an exception when you change the view hierarchy * in animationEnd. http://stackoverflow.com/a/7445557/587186 */ new Handler().post(new Runnable() { public void run() { if (interventionPreview != null) { interventionPreview.setVisibility(View.GONE); } } }); }
hizo, espero que ayude.Si establece
setVisibility(View.GONE)
después de alguna animación (desvanecimiento, por ejemplo), intente borrar la animación conclearAnimation()
. Eso es lo que me ayudó.fuente
android:fillAfter
yandroid:fillEnabled
en sus animaciones y desea que la vista deje de responder.clearAnimation()
detiene la animación y no puedo ver la animación de desvanecimiento. En lugar de ese, lo uséalpha.setFillAfter(false);
dentro de mi animación alfa y funcionó exactamente como esperaba.clearAnimation()
llamada en elonAnimationEnd()
método. Entonces funciona como se esperaba.Intente establecer la propiedad en la que se puede hacer clic en falso usando setClickable (falso) después de setVisibility (View.GONE)
fuente
Sí,
mview.clearAnimation()
tienen algunas issuses peroamination.setFillAfter(false);
ymview.setClickable(false);
funciona perfecto.fuente
Lo que espero que suceda es que haga que una vista sea invisible, pero las vistas que los niños aún responden a los clics (es decir, su vista es un grupo de vistas). Podrías hacer algo como:
private void hideTheChildren(View v){ if(v instanceof ViewGroup) { int count = ((ViewGroup)v).getChildCount(); for(int k = 0 ; k < count ; k++) { hideTheChildren(((ViewGroup)v).getChildAt(k)); } v.setVisibility(View.GONE); } else { v.setClickable(false); v.setVisibility(View.GONE); } }
por supuesto, entonces también tienes que hacer lo contrario
private void showTheChildren(View v){ if(v instanceof ViewGroup) { int count = ((ViewGroup)v).getChildCount(); for(int k = 0 ; k < count ; k++) { showTheChildren(((ViewGroup)v).getChildAt(k)); } v.setVisibility(View.VISIBLE); } else { v.setClickable(true); v.setVisibility(View.VISIBLE); } }
Esto me ha funcionado en el pasado. Actualmente no conozco una mejor manera de hacer esto.
fuente
Hubiera publicado esto como comentario, pero desafortunadamente no pude publicar un comentario. Como podría ser una posible solución para usted, lo publico de esa manera:
Mientras escribe "onClick", supongo que está utilizando el
onClick
atributo en su diseño XML. Intente establecer unOnClickListener
con ensetOnClickListener
lugar delonClick
atributo. Quizás esto ayude ...fuente
Para aquellos que respondieron anteriormente y aún no resolvieron sus problemas, recomiendo eliminar la vista de la vista principal. Si necesita mostrar la vista nuevamente, simplemente haga una copia y agréguela a la vista principal.
Esto puede parecer excesivo, pero estaba ocultando / mostrando grupos de vista completos en su caso, podría ser un botón, una vista de texto o una imagen, esta solución seguirá funcionando.
fuente
BottomSheetBehavior
mientras cargaba datos. Con todas las demás respuestas, la vista siguió interceptando los toques / gestos. Y esto rompió miBottomSheetBehaviour
| Android 8.0 con design-support-lib 27.0.2intente agregar .clearAnimation () en la anulación onAnimationEnd.
fuente
si tiene una animación en la vista, debe llamar a view.clearAnimation.
fuente