recyclerview嵌套recyclerview_NestedScrollView嵌套问题(RecycleView...持续记录)

1. 滑动不流畅

 解决方法一:

 recyclerView.setNestedScrollingEnable(false);

 解决办法二:

 LinearLayoutManager layoutManager = new LinearLayoutManager(getContext());
 recyclerView.setLayoutManager(layoutManager);
 recyclerView.setHasFixedSize(true);
 recyclerView.setNestedScrollingEnabled(false);
 layoutManager.setSmoothScrollbarEnabled(true);
 layoutManager.setAutoMeasureEnabled(true);

2. 当NestedScrollView嵌套RecycleView布局由Fragment管理,Fragment切换时会自动滑动到ReycleView的顶部.

  解决方法一:

     在NestedScrollView唯一子布局中加入 android:descendantFocusability="blocksDescendants"

      --android:descendantFocusability 有三个属性:

        优先于子控件获取焦点    "beforeDescendants"

        当子控件不需要焦点时,获取焦点    "afterDescendants"

        覆盖所有子控件获取焦点   "blocksDescendants"


  解决方法二:

  recyclerView.setFocusable(false);

15a5cd86d97576a0146c465c83aa83d6.png

3. ScrollView中的布局不能撑满全屏

解决: 必须ScrollView设置

android:fillViewport="true"

4. android scrollview 自动滚动到顶部或者底部

  // 设置默认滚动到顶部
  scrollView.post(new Runnable() {
   @Override
   public void run() {
    scrollView.fullScroll(ScrollView.FOCUS_UP);
   }
  });

  // 设置默认滚动到底部
  scrollView.post(new Runnable() {
   @Override
   public void run() {
    scrollView.fullScroll(ScrollView.FOCUS_DOWN);
   }
  });

5. 一个内容很长的布局, 加了scrollview会自动滚动到底部的问题

解决:找到scrollview里的其中一个子控件

mTitle.setFocusable(true);
mTitle.setFocusableInTouchMode(true);
mTitle.requestFocus();

6. NestedScrollView与AppBarLayout配合使用时,视图会重叠

  NestedScrollView与AppBarLayout配合使用时,NestedScrollView属性必须设置layout_behavior值,
 如果要使NestedScrollView与AppBarLayout实现联动,那前者的layout_behavior属性一定要设置和
 后者的所有根子布局的layout_scrollFlags属性一定都要设置!

7. NestedScrollView嵌套ListView, listview只显示一行数据

  解决:重写listview的onMeasure

  public class NestedListView  extends ListView  {
 
 
    public NestedListView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
 
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        ///< 测量的大小由一个32位的数字表示,前两位表示测量模式,后30位表示大小,这里需要右移两位才能拿到测量的大小
        int heightSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
        super.onMeasure(widthMeasureSpec, heightSpec);
    }
}

仅供参考,有些情况可能还是会有问题,就需要再研究了。做个记录,遇到了特殊情况再看看吧。综合了一些网友的以及自己遇到了的情况。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值