ScrollView

54 阅读1分钟

ScrollView嵌套其他View和RecycleView,Fragment每次切换界面都会自动滚动到底部

解决方案:
其他View设置可获取焦点,触摸可获取焦点属性

android:focusable="true"
android:focusableInTouchMode="true"
<android.support.v4.widget.NestedScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:overScrollMode="never"
    android:scrollbars="none">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <cn.bingoogolapple.bgabanner.BGABanner
            android:id="@+id/bv_banner"
            android:layout_width="match_parent"
            android:layout_height="108dp"
            android:focusable="true"
            android:focusableInTouchMode="true"
            android:scaleType="centerCrop"
            bind:banner_aspectRatio="3.47"
            bind:banner_indicatorGravity="bottom"
            bind:banner_pointAutoPlayAble="true"
            bind:banner_pointAutoPlayInterval="5000"
            bind:banner_pointContainerBackground="@color/transparent"
            bind:isVisible="@{viewModel.visibleBanner}" />

        <android.support.v7.widget.RecyclerView
            android:id="@+id/recycle_view"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            bind:adapter="@{adapter}"
            bind:isVisible="@{viewModel.visibleProductList}"
            bind:itemAnimator="@{null}"
            bind:itemBinding="@{viewModel.itemBinding}"
            bind:items="@{viewModel.items}"
            bind:layoutManager="@{LayoutManagers.grid(2)}" />
    </LinearLayout>
</android.support.v4.widget.NestedScrollView>

focusableInTouchMode:控制视图是否可以在触摸模式下获得焦点的布尔值。如果一个视图设置为true,则该视图可以在单击时获得焦点,并且如果单击另一个未将此属性设置为 true 的视图,仍可以保持焦点。

滑动

binding.scrollView.post(new Runnable() {
    @Override
    public void run() {
        //滑动到顶部
        binding.scrollView.fullScroll(ScrollView.FOCUS_UP);
        //滑动到底部
        binding.scrollView.fullScroll(ScrollView.FOCUS_DOWN);
         //滑动到某个位置
        int offSetY=100;
        binding.scrollView.smoothScrollTo(0, offSetY);
    }
});

ScrollView子View高度不能撑满全屏

fillViewport:使得子布局高度和scrollview一样