Программно прокрутите до верхней части NestedScrollView
есть ли способ программно прокрутить до верхней части NestedScrollView
также вызывая события прокрутки для родителя? smoothScrollTo(x, y)
не делегирует события прокрутки в NestedScrollingParent
.
9 ответов:
мне удалось это сделать (анимированная прокрутка):
CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) appBarLayout.getLayoutParams(); AppBarLayout.Behavior behavior = (AppBarLayout.Behavior) params.getBehavior(); if (behavior != null) { behavior.onNestedFling(coordinatorLayout, appBarLayout, null, 0, 10000, true); }
здесь
10000
скорость в y-направлении.
еще один способ сгладить прокрутку
NestedScrollView
чтобы весь путь вверх или вниз используетfullScroll(direct)
функцииnestedScrollView.fullScroll(View.FOCUS_DOWN); nestedScrollView.fullScroll(View.FOCUS_UP);
ничего не сработало для меня, и я действительно не знаю, почему это сработало, но вот мое решение и проблема.
при добавлении recycler view во вложенный вид прокрутки, он показал recycler view на экране при переходе к этой деятельности. Для того, чтобы прокрутить весь путь вверх, я должен был использовать это:
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.details_recycler_view); recyclerView.setLayoutManager(new LinearLayoutManager(this)); recyclerView.setItemAnimator(new DefaultItemAnimator()); ProductDescriptionAdapter adapter = new ProductDescriptionAdapter(this); adapter.setData(mProduct.getDetails()); recyclerView.setAdapter(adapter); NestedScrollView scrollView = (NestedScrollView) findViewById(R.id.scroll); scrollView.getParent().requestChildFocus(scrollView, scrollView);
вы можете легко подделать прокрутку на уровне NestedScrollView. Вы в основном говорите coordinatorLayout, что вы просто прокручиваете высоту панели инструментов.
NestedScrollView nestedScrollView = (NestedScrollView) getActivity().findViewById(R.id.your_nested_scroll_view); int toolbarHeight = getActivity().findViewById(R.id.toolbar).getHeight(); nestedScrollView.startNestedScroll(ViewCompat.SCROLL_AXIS_VERTICAL); nestedScrollView.dispatchNestedPreScroll(0, toolbarHeight, null, null); nestedScrollView.dispatchNestedScroll(0, 0, 0, 0, new int[]{0, -toolbarHeight}); nestedScrollView.scrollTo(0, nestedScrollView.getBottom());
Я также столкнулся с подобным сценарием. В моем случае, когда я прокручиваю вниз до конца, кнопка FAB должна появиться, и когда пользователь нажимает на эту кнопку FAB, она должна перейти в верхнюю часть страницы. Для этого я добавил @SilentKnight answer
NestedScrollView.scrollTo(0, 0);
для перехода к вершине, но этого недостаточно для плавной анимации для прокрутки вверх.
Для плавной анимации я использовал @Sharj ответ:NestedScrollView.fullScroll(View.FOCUS_UP);
Но тогда моя панель приложений не видна там, поэтому я должен расширить панель приложений следующим образомappBarLayout1.setExpanded(true)
. Поэтому, используя эти три я могу плавно перейти к верхней части страницы.nestedScrollView.fullScroll(View.FOCUS_UP); nestedScrollView.scrollTo(0,0); appBarLayout1.setExpanded(true);
вы можете использовать это для плавной прокрутки.
nestedScrollView.fullScroll(View.FOCUS_UP); nestedScrollView.smoothScrollTo(0,0);
или для нормальной прокрутки
nestedScrollView.fullScroll(View.FOCUS_UP); nestedScrollView.scrollTo(0,0);
используйте представление.scollTo (int x, int y) вместо прокрутки вверх.
findViewById({your NestedScrollView resource id}).scrollTo(0, 0);
я попробовал все вышеперечисленные ответы, ничего не сработало, но мне нужен был только postDelayed.
scrollview.postDelayed(new Runnable() { @Override public void run() { listener.setAppBarExpanded(false, true); //appbar.setExpanded(expanded, animated); scrollview.fullScroll(View.FOCUS_DOWN); } }, 400);