是否可以NestedScrollView
通过触发父级的滚动事件来以编程方式滚动到a的顶部?smoothScrollTo(x, y)
不会将滚动事件委托给NestedScrollingParent
。
是否可以NestedScrollView
通过触发父级的滚动事件来以编程方式滚动到a的顶部?smoothScrollTo(x, y)
不会将滚动事件委托给NestedScrollingParent
。
Answers:
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)
function
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级别的滚动。基本上,您告诉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());
您可以使用它进行平滑滚动。
nestedScrollView.fullScroll(View.FOCUS_UP);
nestedScrollView.smoothScrollTo(0,0);
或正常滚动
nestedScrollView.fullScroll(View.FOCUS_UP);
nestedScrollView.scrollTo(0,0);
将行添加两次,为我工作
nestedScrollView.fullScroll(View.FOCUS_UP);
nestedScrollView.fullScroll(View.FOCUS_UP);
我使用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位于NestedScrollView内时如何滚动到RecyclerView的项目的方法
首先,获得,item height
然后滚动到所需的position
。
val itemHeight =
binding.calendarRecyclerView.findViewHolderForAdapterPosition(0)!!.itemView.height
binding.nestedScrollView2.smoothScrollTo(0, position * itemHeight)