ScrollView嵌套RecycleView相关问题
一、关于NestedScrollView + RecyclerView页面载入时总是滑动到最底部
项目中遇到页面载入时总是滑动到最底部,原因是焦点在页面底部;
方法一:解决方法就是在根布局设置android:descendantFocusability="blocksDescendants" ;
android:descendantFocusability 有三种值:
beforeDescendants:viewgroup会优先其子类控件而获取到焦点
afterDescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点
blocksDescendants:viewgroup会覆盖子类控件而直接获得焦点
这种方法,会造成页面中Editext焦点被抢导致无法输入,需要用到第二种方法。
方法二:对于有Editext的页面需要在根布局使用 :
android:focusable="true"
android:focusableInTouchMode="true";
二、解决NestedScrollView嵌套RecycleView显示一行的bug
scrollview嵌套recyclerview不能完全显示的几种办法:
1.http://www.cnblogs.com/woaixingxing/p/6098726.html
2.http://www.jianshu.com/p/3815d36fd371?nomobile=yes
android:descendantFocusability="blocksDescendants"
该属性是当一个为view获取焦点时,定义viewGroup和其子控件两者之间的关系。
属性的值有三种:
beforeDescendants:viewgroup会优先其子类控件而获取到焦点
afterDescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点
blocksDescendants:viewgroup会覆盖子类控件而直接获得焦点
三、解决ScrollView嵌套RecyclerView(横向)或ListView(横向)时,横向滑动不顺畅的问题。
/** * 解决ScrollView与RecyclerView横向滚动时的事件冲突 */public class ScrollRecyclerView extends RecyclerView { public ScrollRecyclerView(Context context) { super(context); } public ScrollRecyclerView(Context context, @Nullable AttributeSet attrs) { super(context, attrs); } public ScrollRecyclerView(Context context, @Nullable AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } private float lastX, lastY; @Override public boolean onInterceptTouchEvent(MotionEvent e) { boolean intercept = super.onInterceptTouchEvent(e); switch (e.getAction()) { case MotionEvent.ACTION_DOWN: lastX = e.getX(); lastY = e.getY(); break; case MotionEvent.ACTION_MOVE: // 只要横向大于竖向,就拦截掉事件。 // 部分机型点击事件(slopx==slopy==0),会触发MOVE事件。 // 所以要加判断(slopX > 0 || sloy > 0) float slopX = Math.abs(e.getX() - lastX); float slopY = Math.abs(e.getY() - lastY); // Log.log("slopX=" + slopX + ", slopY=" + slopY); if((slopX > 0 || sloy > 0) && slopX >= slopY){ requestDisallowInterceptTouchEvent(true); intercept = true; } break; case MotionEvent.ACTION_UP: intercept = false; break; } // Log.log("intercept"+e.getAction()+"=" + intercept); return intercept; }}
更多相关文章
- 五、Fresco——ScaleType focusCrop属性详解
- Android用户输入自动提示控件AutoCompleteTextView使用方法
- Android(java)学习笔记92:泛型高级之通配符
- android 5.0系统主题颜色相关
- Android(安卓)获取控件的高度或者宽度的方法
- Android(安卓)开源控件系列_2
- Android中自制通讯录中显示出数据库中的姓名和电话号码进行打电
- Android(安卓)UI
- android中gridview的居中问题