Android 6.0使用Scrollview嵌套Recycle

2017-03-14  本文已影响319人  晚睡晚起的

在Android6.0以下的系统上,使用Scrollview嵌套RecycleView时显示是正常的,而在6.0系统上,却出现了高度显示不正常的问题.为此我在网上查了好几种方法.
1.重写RecycleView,我是用这种方法解决了问题

/**
 * 适配6.0 scrollv嵌套recyclev显示不全
 */
public class InnerRecycleView extends RecyclerView {
    public InnerRecycleView(Context context) {
        super(context);
    }

    public InnerRecycleView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

        int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
        super.onMeasure(widthMeasureSpec, expandSpec);

        ViewGroup.LayoutParams params = getLayoutParams();
        params.height = getMeasuredHeight();

        setNestedScrollingEnabled(false);

    }
}

2.在RecycleView外面包含一层RelativeLayout布局
这个方法是在stackoverflow上找到的:
http://stackoverflow.com/questions/27083091/recyclerview-inside-scrollview-is-not-working

 <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:descendantFocusability="blocksDescendants">
        
        <android.support.v7.widget.RecyclerView
            android:id="@+id/rv_goods"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>

    </RelativeLayout>

这里要注意的关键属性是:
android:descendantFocusability="blocksDescendants"
Defines the relationship between the ViewGroup and its descendants when looking for a View to take focus.Must be one of the following constant values.


api.jpg

该属性是当view获取焦点时,定义viewGroup和其子控件两者之间的关系.
属性的值有三种:
beforeDescendants: viewgroup会优先其子类控件而获取到焦点

afterDescendants: viewgroup只有当其子类控件不需要获取焦点时才获取焦点

blocksDescendants: viewgroup会覆盖子类控件而直接获得焦点

上一篇 下一篇

猜你喜欢

热点阅读