Чи є спосіб програмно прокрутити до початку a NestedScrollView
, також запускаючи події прокрутки для батьків? smoothScrollTo(x, y)
не делегує події прокрутки до NestedScrollingParent
.
Чи є спосіб програмно прокрутити до початку a 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
- швидкість у напрямку у.
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. Ви в основному повідомляєте koordinatorLayout, що ви щойно прокрутили висоту панелі інструментів.
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)