Chciałbym włączyć ScrollView i wyłączyć go jednym kliknięciem przycisku.
Disable oznacza tak, jakby ScrollView nie istniał ... a włączenie zwraca ScrollView.
Chcę tego, ponieważ mam galerię z obrazami tekstowymi, a po kliknięciu przycisku zmienia się orientacja ekranu, więc w orientacji poziomej tekst staje się większy. Chcę mieć ScrollView, aby obraz się nie rozciągał, a tekst stał się nieczytelny.
scrollview.Enabled=false / setVisibility(false)
nic nie robi.
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>
Dzięki
Edycja1: Nie mogę użyć widoczności (zniknęła), ponieważ to również ukryłoby Galerię, chcę ukryć efekt ScrollView. Kiedy jest ScrollView, obrazy w Galerii stają się przewijane i nie mieszczą się na ekranie, więc musisz przewijać, aby zobaczyć cały obraz, nie chcę wyłączać / włączać tego jednym kliknięciem przycisku.
Próbowałem tego:
((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);
Ale nadal obrazy w Galerii można przewijać i nie mieszczą się na ekranie. Jakie jest na to rozwiązanie?
onTouchEvent(MotionEvent ev)
Poszedłem tą drogą:
źródło
ListView
działa odwrotnie: prawda, gdy przewijanie jest wyłączone, a fałsz, gdy jest włączone.Znalazłem to proste rozwiązanie po prostu ustawione
źródło
requestDisallowInterceptTouchEvent
działa tylko dla zablokowanego elementu podrzędnego Widoku. Więc byłoby bardziej jakmLinearLayout.requestDisallowInterceptTouchEvent(true);
Wyłącz ScrollView
źródło
na początek użyłem kodu zamieszczonego w pierwszym komentarzu, ale zmieniłem go w ten sposób:
wtedy zadzwoniłem w ten sposób
ponieważ próbowałem
ale powiedział, że setIsScrollable jest niezdefiniowane
mam nadzieję, że to Ci pomoże
źródło
ScrollView
jest głównym kontenerem układu Twojej klasy układu.Oto prostsze rozwiązanie. Zastąp
onTouch()
for theScrollView
OnTouchListener
i zwróć false, jeśli chcesz pominąć przewijanie dotykiem. Programowe przewijanie nadal działa i nie ma potrzeby rozszerzaniaScrollView
klasy.źródło
Nie mam wystarczającej liczby punktów, aby skomentować odpowiedź, ale chciałem powiedzieć, że odpowiedź mikec działała dla mnie, z wyjątkiem tego, że musiałem ją zmienić, aby zwrócić!
źródło
źródło
@JosephEarl +1 Ma tutaj świetne rozwiązanie, które działało idealnie dla mnie z kilkoma drobnymi modyfikacjami, aby robić to programowo.
Oto drobne zmiany, które wprowadziłem:
Klasa LockableScrollView:
Główna aktywność:
źródło
Miałem układ nad NestedScrollView zużywający zdarzenie touch i wyłączający przewijanie:
i aby umożliwić:
źródło
Możesz utworzyć CustomScrollView, dla którego możesz wyłączyć jego interferencję z innymi widokami. Chociaż może to być czasami irytujące dla użytkownika końcowego. Używaj go ostrożnie.
To jest kod:
Jak korzystać z CustomScrollView?
Możesz dodać CustomScrollView jako element nadrzędny do ekranu, do którego chcesz dodać kolejny widok Scrollview jako widok podrzędny, a cały ekran można przewijać. Użyłem tego dla RelativeLayout.
Zadziałało w moim przypadku.
źródło
źródło
czy to pomaga?
źródło
Możesz rozszerzyć galerię i użyć jakiejś flagi, aby wyłączyć przewijanie, kiedy chcesz:
źródło
Jak widać w dokumentacji , nie można ustawić widoczności na fałsz. W Twoim przypadku prawdopodobnie powinieneś użyć:
źródło
po prostu zrób odbiornik kliknięć przycisku
aby pasek przewijania nie był włączany po kliknięciu przycisku
źródło