2016-11-22 20 views
6

Chciałbym, aby przewijanie w pionie w trybie CollapsingToolbarLayout/AppBarLayout było TYLKO aktywne, gdy zdarzenie scroll/touch wystąpiło w widoku nestedscrollview (działa), ale jeśli użytkownik spróbuje przewinąć okno CollapsingToolbarLayout/AppBarLayout bezpośrednio to nie powinno działać. Potrzebuję tego, ponieważ zdarzenia przewijania/dotyku są zakłócane przez moje zdarzenia przewijania recyclerview.Wyłącz przewijanie w pionie w CollapsingToolbarLayout/AppBarLayout

mam tę strukturę:

CoordinatorLayout 

-- AppBarLayout 

---- CollapsingToolbarLayout (scrollflags: scroll, exitUntilCollapsed, snap) 

------ Toolbar (CollapseMode: pin) 

------ RecyclerView (Horizontal, CollapseMode: pin) 

----- /CollapsingToolbarLayout 

-- /AppBarLayout 

-- NestedScrollView (Behaviour: appbar_scrolling_view_behavior) 

-- /NestedScrollView 

/CoordinatorLayout 

próbowałem przesłanianie onTouch() i() onInterceptTouchEvent zarówno CollapsingToolbarLayout/AppBarLayout ale utrzymuje przechwytywania dotykowego zdarzeń/zwój.

Odpowiedz

13

Ok, znalazłem rozwiązanie dla tego.

Trzeba tylko zastąpić metodę onDrag() w zachowaniu AppBarLayout, a przewijanie nie zostanie uruchomione, jeśli dotyk pojawi się nad widokiem AppBarLayout.

CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) appBarLayout.getLayoutParams(); 
AppBarLayout.Behavior behavior = (AppBarLayout.Behavior) params.getBehavior(); 
behavior.setDragCallback(new AppBarLayout.Behavior.DragCallback() { 
    @Override 
    public boolean canDrag(@NonNull AppBarLayout appBarLayout) { 
     return false; 
    } 
}); 

Rozwiązanie stąd: How to disable scrolling of AppBarLayout in CoordinatorLayout?

Jeśli napotkasz NullPointerException powodu zerowej Behavior, należy przypisać jedną pierwsze:

CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) mAppbar.getLayoutParams(); 
params.setBehavior(new AppBarLayout.Behavior()); 
+0

Dziękuję. Działa to, ale nadal mam problemy ze zmianą orientacji. Czy to też coś widzisz? –

+0

Dzięki! 10000000 Dzięki! To naprawdę działa !!!!))))) – maXp

Powiązane problemy