Gibt es eine Möglichkeit, programmgesteuert nach oben zu scrollen, NestedScrollView
indem auch die Bildlaufereignisse für das übergeordnete Element ausgelöst werden? smoothScrollTo(x, y)
delegiert die Bildlaufereignisse nicht an die NestedScrollingParent
.
android
android-layout
android-nestedscrollview
lukas1994
quelle
quelle
Antworten:
NestedScrollView.scrollTo(0, 0);
quelle
NestedScrollView.scrollTo(0, 0);
sollst damit nach oben scrollenNestedScrollView
. Bitte schön.Ich habe es geschafft (animiertes Scrollen):
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); }
wo
10000
ist die Geschwindigkeit in y-Richtung.quelle
behavior.onNestedFling(coordinator, appbar, null, 0, -params.height, true);
umkehrenbehavior.onNestedFling(coordinator, appbar, null, 0, params.height, true);
Eine andere Möglichkeit, den Bildlauf
NestedScrollView
nach oben oder unten zu glätten , ist die Verwendung derfullScroll(direct)
FunktionnestedScrollView.fullScroll(View.FOCUS_DOWN); nestedScrollView.fullScroll(View.FOCUS_UP);
quelle
NestedScrollView
unterhalb der Appbar erstellt?Bei mir hat nichts funktioniert, und ich weiß nicht genau, warum das funktioniert hat, aber hier ist meine Lösung und mein Problem.
Beim Hinzufügen einer Recycler-Ansicht zu einer verschachtelten Bildlaufansicht wurde die Recycler-Ansicht auf dem Bildschirm angezeigt, wenn Sie zu dieser Aktivität gelangen. Um ganz nach oben zu scrollen, musste ich Folgendes verwenden:
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);
quelle
scrollView.getParent().requestChildFocus(scrollView, scrollView);
Ich sah mich auch einem ähnlichen Szenario gegenüber. In meinem Fall sollte beim Scrollen nach unten bis zum Ende die FAB-Schaltfläche angezeigt werden, und wenn der Benutzer auf diese FAB-Schaltfläche tippt, sollte sie oben auf der Seite angezeigt werden. Dafür habe ich @ SilentKnight Antwort hinzugefügt.
NestedScrollView.scrollTo(0, 0);
Für nach oben gehen, aber das reicht nicht für eine reibungslose Animation zum Scrollen nach oben.Für eine reibungslose Animation habe ich die @ Sharj-Antwort verwendet. Dann ist
NestedScrollView.fullScroll(View.FOCUS_UP);
meine AppBar nicht sichtbar. Daher muss ich die AppBar wie folgt erweiternappBarLayout1.setExpanded(true)
. Mit diesen drei kann ich also problemlos zum Anfang der Seite gelangen.nestedScrollView.fullScroll(View.FOCUS_UP); nestedScrollView.scrollTo(0,0); appBarLayout1.setExpanded(true);
quelle
Sie können das Scrollen auf NestedScrollView-Ebene leicht vortäuschen. Grundsätzlich teilen Sie dem Koordinatorlayout mit, dass Sie gerade um die Höhe der Symbolleiste gescrollt haben.
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());
quelle
Sie können dies für einen reibungslosen Bildlauf verwenden.
nestedScrollView.fullScroll(View.FOCUS_UP); nestedScrollView.smoothScrollTo(0,0);
ODER für normale Schriftrolle
nestedScrollView.fullScroll(View.FOCUS_UP); nestedScrollView.scrollTo(0,0);
quelle
Ich habe alle oben genannten Antworten ausprobiert, nichts schien zu funktionieren, aber ich brauchte nur eine Nachverzögerung.
scrollview.postDelayed(new Runnable() { @Override public void run() { listener.setAppBarExpanded(false, true); //appbar.setExpanded(expanded, animated); scrollview.fullScroll(View.FOCUS_DOWN); } }, 400);
quelle
Einige Zeit
NestedScrollView.scrollTo(0, 0);
undscrollview.pageScroll(View.FOCUS_UP);
funktioniert nichtDazu müssen Sie
fling()
undsmoothScrollTo()
zusammen verwendenBEISPIELCODE
nestedScrollView.post { nestedScrollView.fling(0) nestedScrollView.smoothScrollTo(0, 0) }
quelle
Fügen Sie die Zeile zweimal hinzu. Hat für mich funktioniert
nestedScrollView.fullScroll(View.FOCUS_UP); nestedScrollView.fullScroll(View.FOCUS_UP);
quelle
Verwenden Sie stattdessen View.scollTo (int x, int y), um nach oben zu scrollen.
findViewById({your NestedScrollView resource id}).scrollTo(0, 0);
quelle
Ich hatte bei der Verwendung ein Problem mit NestedScrollView als mit RecyclerView. Dieser Code hat bei mir funktioniert : 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);
quelle
So scrolle ich zu einem Element von RecyclerView, wenn sich RecyclerView in NestedScrollView befindet
Holen Sie sich zuerst eine
item height
und scrollenposition
Sie dann zu der gewünschten.val itemHeight = binding.calendarRecyclerView.findViewHolderForAdapterPosition(0)!!.itemView.height binding.nestedScrollView2.smoothScrollTo(0, position * itemHeight)
quelle