3

我有一个类似于ScrollingActivityAndroid Studio 中预设的布局。我用一个装满 20 个组件的组件替换了TextViewin 。 content_scrollingLinearLayoutEditText

为了在我关注 时将工具栏保持在屏幕上EditText,我android:windowSoftInputMode="adjustResize"还在AndroidManifest.xml.

我的问题是NestedScrollView没有正确滚动到focused EditText。当Toolbar没有完全折叠时,NestedScrollView不会向上滚动足够远。Toolbar也不会崩溃 。

显而易见的解决方案是调用scrollTo一个OnFocusChangeListener,但这不会使Toolbar.

我怎样才能NestedScrollView滚动到EditText,就像我用手指做的那样?

4

1 回答 1

0

我想出了一种滚动到 NestedScrollView 中的视图的方法。这应该在键盘打开后执行。

public static void nestedScrollToView(NestedScrollView nestedScrollView, View v, View rootView) {
    nestedScrollView.startNestedScroll(ViewCompat.SCROLL_AXIS_VERTICAL);
    int[] scrolledBy = new int[2];
    int rootBottom = getBottomOnScreen(rootView);
    int viewBottom = getBottomOnScreen(v);
    int toScrollBy = viewBottom - rootBottom;
    if (toScrollBy > 0) {
        boolean preScrollSuccess = nestedScrollView.dispatchNestedPreScroll(0, toScrollBy, scrolledBy, null);
        if (preScrollSuccess) {
            boolean scrollSuccess = nestedScrollView.dispatchNestedScroll(0, 0, 0, toScrollBy, null);
        }
        nestedScrollView.scrollBy(0, toScrollBy - scrolledBy[1]);
    }
}

public static int getBottomOnScreen(View view) {
    int[] location = new int[2];
    view.getLocationOnScreen(location);
    return location[1] + view.getHeight();
}
于 2015-11-12T11:39:37.667 回答