Есть ли способ программной прокрутки к началу NestedScrollView
, также вызывая события прокрутки для родителя? smoothScrollTo(x, y)
не делегирует события прокрутки объекту NestedScrollingParent
.
82
Есть ли способ программной прокрутки к началу NestedScrollView
, также вызывая события прокрутки для родителя? smoothScrollTo(x, y)
не делегирует события прокрутки объекту NestedScrollingParent
.
Ответы:
NestedScrollView.scrollTo(0, 0);
источник
NestedScrollView.scrollTo(0, 0);
для прокрутки к началуNestedScrollView
. Добро пожаловать.У меня получилось (анимированная прокрутка):
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-направлении.источник
behavior.onNestedFling(coordinator, appbar, null, 0, -params.height, true);
чтобы отменить егоbehavior.onNestedFling(coordinator, appbar, null, 0, params.height, true);
Еще один способ плавной прокрутки
NestedScrollView
вверх или вниз - использованиеfullScroll(direct)
функцииnestedScrollView.fullScroll(View.FOCUS_DOWN); nestedScrollView.fullScroll(View.FOCUS_UP);
источник
NestedScrollView
под панелью приложений?У меня ничего не работало, и я действительно не знаю, почему это сработало, но вот мое решение и проблема.
При добавлении представления ресайклера во вложенное представление прокрутки оно показывало на экране вид ресайклера при переходе к этому действию. Чтобы прокрутить вверх, мне пришлось использовать это:
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);
источник
scrollView.getParent().requestChildFocus(scrollView, scrollView);
Я тоже столкнулся с подобным добрым сценарием. В моем случае, когда я прокручиваю страницу вниз до конца, должна появиться кнопка FAB, и когда пользователь нажимает на эту кнопку FAB, она должна переходить в верхнюю часть страницы. Для этого я добавил ответ @SilentKnight
NestedScrollView.scrollTo(0, 0);
Для перехода наверх, но этого недостаточно для плавной анимации для прокрутки вверх.Для плавной анимации я использовал ответ @Sharj,
NestedScrollView.fullScroll(View.FOCUS_UP);
но тогда мой AppBar не отображается, поэтому я должен расширить AppBar следующим образомappBarLayout1.setExpanded(true)
. Таким образом, используя эти три, я могу плавно перейти к началу страницы.nestedScrollView.fullScroll(View.FOCUS_UP); nestedScrollView.scrollTo(0,0); appBarLayout1.setExpanded(true);
источник
Вы можете легко имитировать прокрутку на уровне NestedScrollView. Вы в основном говорите координаторуLayout, что вы только что прокручивали по высоте панели инструментов.
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());
источник
Вы можете использовать это для плавной прокрутки.
nestedScrollView.fullScroll(View.FOCUS_UP); nestedScrollView.smoothScrollTo(0,0);
ИЛИ для нормальной прокрутки
nestedScrollView.fullScroll(View.FOCUS_UP); nestedScrollView.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);
источник
Некоторое время так
NestedScrollView.scrollTo(0, 0);
иscrollview.pageScroll(View.FOCUS_UP);
не работаетПри этом нужно использовать
fling()
иsmoothScrollTo()
вместеОБРАЗЕЦ КОДА
nestedScrollView.post { nestedScrollView.fling(0) nestedScrollView.smoothScrollTo(0, 0) }
источник
Добавьте строку два раза. Сработало у меня
nestedScrollView.fullScroll(View.FOCUS_UP); nestedScrollView.fullScroll(View.FOCUS_UP);
источник
Вместо этого используйте View.scollTo (int x, int y) для прокрутки вверх.
findViewById({your NestedScrollView resource id}).scrollTo(0, 0);
источник
У меня была проблема с NestedScrollView, когда я использовал, чем с RecyclerView. Этот код сработал для меня: nestedScrollView !!. GetParent (). RequestChildFocus (nestedScrollView, nestedScrollView);
val recyclerViewSearch = activity?.findViewById<RecyclerView>(R.id.recycler) recyclerViewSearch.setAdapter(setAdapterSearch()) val nestedScrollView = activity?.findViewById<NestedScrollView>(R.id.bottom_sheet_Search) nestedScrollView!!.getParent().requestChildFocus(nestedScrollView, nestedScrollView);
источник
Вот как я прокручиваю до элемента RecyclerView, когда RecyclerView находится внутри NestedScrollView
Сначала возьмите, а
item height
затем прокрутите доposition
нужного.val itemHeight = binding.calendarRecyclerView.findViewHolderForAdapterPosition(0)!!.itemView.height binding.nestedScrollView2.smoothScrollTo(0, position * itemHeight)
источник