Android之ScrollView和RecyclerView滑动冲突问题,GridView在NestedScrollView失去高度显示不全,

2023-05-26 11:36:23 浏览数 (3)

ScrollView和RecyclerView滑动冲突问题

方法1:我们可以把scrollview换成androidx.core.widget.NestedScrollView

代码语言:html复制
<com.scwang.smartrefresh.layout.SmartRefreshLayout
    android:id="@ id/refreshLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:srlEnableFooterFollowWhenLoadFinished="true"
    app:srlEnableScrollContentWhenLoaded="true">
    
    <!-- 传统scrollview和RecyclerView滚动冲突 -->
    <androidx.core.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <androidx.recyclerview.widget.RecyclerView
            android:id="@ id/record_item_card"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:divider="@null"
            android:paddingHorizontal="5dp"
            android:visibility="visible" />
    
    </androidx.core.widget.NestedScrollView>
    
    <com.scwang.smartrefresh.layout.footer.ClassicsFooter
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:srlClassicsSpinnerStyle="Translate" />

</com.scwang.smartrefresh.layout.SmartRefreshLayout>

方法2:

代码语言:java复制
kesanRv.setLayoutManager(new LinearLayoutManager(getActivity()) {
    @Override
    public boolean canScrollVertically() {
        return false;
    }
});

如果无法解决,在布局文件中的RecycleView的外部套一个RelativeLayout

GridView在NestedScrollView失去高度显示不全

在使用Android的ScrollView里面嵌套GridView时,设置android:layout_height="wrap_content"属性,运行界面的效果不会出现全部数据,即GridView会显示不全。 

建议:新建一个类继承GridView

代码语言:java复制
public class MyGridView extends GridView {
    public MyGridView(Context context) {
        super(context);
    }

    public MyGridView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public MyGridView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    public MyGridView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        //重写此方法
        int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
        super.onMeasure(widthMeasureSpec, expandSpec);
    }

}

xml文件:

代码语言:html复制
<!-- 原生Gridview自带滚动条,继承此类重写方法去掉滚动 -->
<com.example.view.MyGridView
    android:id="@ id/menu_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:horizontalSpacing="@dimen/dp_10"
    android:verticalSpacing="@dimen/dp_10"
    android:numColumns="3"/>

之后就是适配器的事

0 人点赞