Me gustaría habilitar ScrollView y deshabilitarlo con un clic de botón.
Deshabilitar significa como si ScrollView no estuviera allí ... y habilitarlo devuelve ScrollView.
Quiero eso porque tengo una galería con imágenes de texto, y en un botón, haga clic en los cambios de orientación de la pantalla, por lo que en Paisaje el texto se agranda. Y quiero ScrollView para que la imagen no se estire y el texto se vuelva ilegible.
scrollview.Enabled=false / setVisibility(false)
no hace nada.
xml:
<ScrollView
android:id="@+id/QuranGalleryScrollView"
android:layout_height="fill_parent"
android:layout_width="fill_parent">
<Gallery android:id="@+id/Gallery"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scrollbars="horizontal"></Gallery>
</ScrollView>
Gracias
Edit1: No puedo usar Visibility (desaparecido) ya que eso también ocultaría la Galería, lo que quiero es ocultar el efecto de ScrollView. Cuando hay ScrollView, las imágenes en la Galería se vuelven desplazables y no caben en la pantalla, por lo que debe desplazarse para ver la imagen completa, no quiero deshabilitar / habilitar eso con un clic de botón.
Probé esto:
((ScrollView)findViewById(R.id.QuranGalleryScrollView)).setOnTouchListener(null);
((ScrollView)findViewById(R.id.QuranGalleryScrollView)).setHorizontalScrollBarEnabled(false);
((ScrollView)findViewById(R.id.QuranGalleryScrollView)).setVerticalScrollBarEnabled(false);
((ScrollView)findViewById(R.id.QuranGalleryScrollView)).setEnabled(false);
Pero aún así, las imágenes de la Galería se pueden desplazar y no se ajustan a la pantalla. ¿Cuál es la solución a esto?
onTouchEvent(MotionEvent ev)
Yo había ido de esta manera:
fuente
ListView
funciona de manera opuesta: verdadero cuando el desplazamiento está deshabilitado y falso cuando está habilitado.Encontré esta solución simple
fuente
requestDisallowInterceptTouchEvent
solo funciona para que el elemento secundario de la Vista esté bloqueado. Entonces sería más comomLinearLayout.requestDisallowInterceptTouchEvent(true);
Deshabilitar ScrollView
fuente
para empezar, utilicé el Código publicado en el primer comentario, pero lo cambié así:
luego lo llamé de esta manera
porque lo intenté
pero decía que setIsScrollable no está definido
Espero que esto ayude
fuente
ScrollView
es el contenedor de diseño principal de su clase de diseño.He aquí una solución más sencilla. Reemplace el
onTouch()
paraScrollView
OnTouchListener
y devuelva falso si desea omitir el desplazamiento táctil. El desplazamiento programático sigue funcionando y no es necesario ampliar laScrollView
clase.fuente
No tengo suficientes puntos para comentar sobre una respuesta, pero quería decir que la respuesta de mikec funcionó para mí, excepto que tuve que cambiarla para regresar. IsScrollable así:
fuente
fuente
@JosephEarl +1 Tiene una gran solución aquí que funcionó perfectamente para mí con algunas modificaciones menores para hacerlo programáticamente.
Estos son los cambios menores que hice:
Clase LockableScrollView:
Actividad principal:
fuente
Tenía un diseño sobre NestedScrollView que consumía el evento táctil y deshabilitaba el desplazamiento:
y para habilitar:
fuente
Puede hacer un CustomScrollView, para lo cual puede deshabilitar su interferencia con otras vistas. Aunque esto a veces puede resultar irritante para el usuario final. Úselo con precaución.
Este es el código:
¿Cómo utilizar CustomScrollView?
Puede agregar CustomScrollView como principal a la pantalla en la que desea agregar otra Scrollview como vista secundaria, y toda la pantalla se puede desplazar. Usé esto para un RelativeLayout.
Funcionó para mi caso.
fuente
fuente
¿Esto ayuda?
fuente
Puede extender la galería y usar alguna bandera para deshabilitar el desplazamiento cuando lo desee:
fuente
Como puede ver en la documentación , no puede establecer la visibilidad en falso. En su caso, probablemente debería usar:
fuente
en el botón haga clic en el oyente simplemente haga
para que la barra de desplazamiento no esté habilitada al hacer clic en el botón
fuente