Scrollview中嵌套recyclerview时,如何获得recyclerview的总高度?

Scrollview中嵌套recyclerview时,如何获得recyclerview的总高度?不然外层的scrollview没什么用

7个回答

你获得是计算的实际高度还是有问题的高度,我们知道,scrollview嵌套listview、gridview之类的有问题,所以如果你需要计算recycleview的高度,就需要知道
item的个数与item的高度,然后计算得出

qq787068730
大虫子猪NO1 回复yyy000112: 只有真正接触了这块的人才知道,通过计算每个item的高度乘以item的个数,这样是不准确的。最好的办法请看我的答案
2 年多之前 回复
yyy000112
yyy000112 计算item高度时用layoutManager.getHeight();获取出来的高度为什么有时候很不准确
2 年多之前 回复

试着重写RecyclerView的onMeasure方法试试,

 class MyRecyclerView extends RecyclerView {
    public MyRecyclerView(Context context) {
        super(context);
    }

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

    public MyRecyclerView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
                MeasureSpec.AT_MOST);

        super.onMeasure(widthMeasureSpec, expandSpec);
    }
}

我个人意见,相对于嵌套来说,如果是listview的话不如用添加header和footer用起来方便,recyclerview的话也可以添加header,只不过不像listview有原生方法那么方便,另外也可以考虑运用多布局来完成,也很方便。。。

yyy000112
yyy000112 添加头布局不行,我这一个页面里可以切换几个子页面
接近 3 年之前 回复

RecyclerView或者ListView等在页面加载后除非外部条件发生改变重新设置其高度,否则他们的高度将一直和加载的时候一致,其实现机理并不是
为每个item都设定一个新的ViewItem,而是根据其界面上可能用到的item个数,初始化对应个数的itemView,然后之后当滚动的时候,只是把数
据条目按照滚动方向移动并显示到与之对应的item上。这样就可以在使用最少的View的情况下显示最多的数据。既能节约内存,又能提高响应速度。

所以从上可以看出,List这一类的控件,是在有限的空间上,按需供应内容。好比商铺,他只有一个窗口给你,你也只能看到一个窗口。只有你想看的东西才会摆到窗口上,暂时不想看的都放到了后院的仓库里。

而ScrollView则是所有View全加载的。所以在ScrollView不适合显示List一类的东西。因为这会非常耗内存。

从上可以看出,如果ScrollView内套入ListView后,ListView的大小除非外部强制改变其大小,否则不会改变,也就是说ListView的高度不会因为其内部View发生改变而发出请求让ListView调整大小。ListView只会说地盘就这么大了,显示不下的内容,就不要显示了。

而ScrollView等其它大部分View在设置恰当的参数的时候,如果自己内部要显示的内容需求更多空间的时候就会主动对parent请求,parent就会重新要求其下的所有View各自看看需要多大地盘,然后parent在根据一定的策略进行设定。

所以ScrollView中嵌套ListView火RecycleView后,指望它里面的内容增加了就主动对ScrollView请求地盘是不行的。

如果要部分固定内容可以跟着List条目一起滚动,那么可以根据情况考虑加header或者footer

建议监听RecyclerView的addOnScrollListener后自己记录onScrolled的dy,
同时给adapter加个registerAdapterDataObserver,
监听插入/删除/移动,自己加减前面记录的dy滚动值。

具体思路就是获得每个item的高度,最后是根据获得item的数量乘以高度,等于把高度写死。至于获得item的高度是在setAdapter之后,用layoutManager.getHeight();获取,但这个方法有时候能获得准确的高度,有时候获取不到准确的,这个问题有待高人解答。

小伙子,你是不是要做RecyclerView铺满屏幕呀?
获得到手机屏幕高度,再减去其他控件高度。剩下的就是RecyclerView的高度啦。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Scrollview嵌套RecyclerView高度显示不全
首先给scrollview加入一个属性 android:fillViewport="true"11 然后处理滑动冲突情况,如下设置 recyclerView.setNestedScrollingEnabled(false);11 最后将Scrollview换成android.support.v4.widget.NestedScrollView,把RecyclerView用Relat
Scrollview嵌套RecyclerView
解决Scrollview嵌套RecyclerView问题
ScrollView嵌套Recyclerview
ScrollView嵌套Recyclerview
关于Scrollview嵌套RecyclerView高度显示不全
前言做 Android开发我们经常会遇到这种ScrollView嵌套Listview或者 嵌套RecyclerView的需求,当我们搜索解决方案时经常会遇到这句话you should never put a scrollable view inside another scrollable view虽然很多人不推荐这种方法,但是总有一些人(比如我)面对产品设计的一些奇葩界面不得不采用这种方案,今天我
scrollview 嵌套recyclerview的新的解决办法
<RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:descendantFocusability="blocksDescendants"> <android.support.v7.widget.RecyclerView
Scrollview嵌套recyclerview时不显示数据
图一和图二分别是不显示数据和正常显示数据的情况,导致这种问题的原因是因为在scrollview嵌套的空间中无法正确计算recyclerview的高度造成的。尝试了几种解决方式,在Scrollview布局中设置高度为充满、添加fillViewport=true,重写Recyclerview,都无法很好的解决这个问题,后面是重写了LayoutManager,才写好的。嵌套多个RecyclerView同
RecyclerView 瀑布流 嵌套ScrollView解决方案
导语:在我们Android项目中,经常有RecyclerView上部添加其他布局的情况,如下图: 我们用一种简单的方式解决这种问题: 1.引入这个modile // RecyclerViewHeader compile 'com.bartoszlipinski.recyclerviewheader:library:1.2.0'2.新建一个布局文件,用RecyclerViewHeade
ScrollView嵌套RecyclerView滑动冲突解决
最近发现自己负责的项目中,有使用 ScrollView 嵌套 RecyclerView 的地方,但是没有做任何针对滑动冲突的处理,于是就想看下为什么没有做这个处理,便进行了如下测试,发现了几个由其的问题。 测试场景:页面内容包括类似 HeaderView 的部分 + RecyclerView列表部分,布局是垂直方向,此处列表之上的布局内容并不是以 header add到RecyclerView上
scrollview 嵌套recyclerview 显示不全.zip
scrollview 嵌套recyclerview 显示不全.zip scrollview 嵌套recyclerview 显示不全.zip
Android中RecyclerView嵌套RecyclerView
RecyclerView是v7包中的一个控件非常实用,尤其是嵌套,这是我在网上找的一个例子,放在这希望和大家下载交流。
Recyclerview的嵌套使用(嵌套recyclerview)
Recyclerview的嵌套使用(嵌套recyclerview),详细的代码解释说明,简单的Demo案例,让你快速上手
RecyclerView嵌套RecyclerView
参考这篇文章然后自己改成需要的,http://www.cnblogs.com/zhujiabin/p/7045812.html,谢谢这个作者。不过我也不知道这个性能咋样,大家可以先去看看博客内容 http://blog.csdn.net/qq_30543115/article/details/77161736 ,看是不是自己需要的,然后在下载吧。
RecyclerView嵌套RecyclerView滑动冲突
RecyclerView嵌套RecyclerView滑动冲突
解决 scrollview嵌套recyclerview 中不能滑动,高度不正常的问题。
摘要: Android 6.0 解决recyclerview 在 scrollview 中不能全部显示,高度不正常的问题。 这个问题困扰了我半天,国内百度上的资料非常的烂。根本无法解决问题。 在android 4 / 5 版本中 scrollview 包含了一个recyclerview 滚动一切正常。 在6.0中不能全部显示。原来是一个BUG 最终 stackoverflow 找到
Scrollview 嵌套 RecyclerView 如何全部显示
Scrollview 嵌套 RecyclerView 如何全部显示 rn重写了一个LinearLayoutManager 和一个LinearLayoutManager 放到一起 然后加了10条,显示的数据只有4个。rnrnrn这是重写的 LinearLayoutManager rnpublic class FullyLinearLayoutManager extends LinearLayoutManager rnrn private static final String TAG = FullyLinearLayoutManager.class.getSimpleName();rnrn public FullyLinearLayoutManager(Context context) rn super(context);rn rnrn public FullyLinearLayoutManager(Context context, int orientation, boolean reverseLayout) rn super(context, orientation, reverseLayout);rn rnrn private int[] mMeasuredDimension = new int[2];rnrn @Overridern public void onMeasure(RecyclerView.Recycler recycler, RecyclerView.State state,rn int widthSpec, int heightSpec) rnrn final int widthMode = View.MeasureSpec.getMode(widthSpec);rn final int heightMode = View.MeasureSpec.getMode(heightSpec);rn final int widthSize = View.MeasureSpec.getSize(widthSpec);rn final int heightSize = View.MeasureSpec.getSize(heightSpec);rnrn Log.i(TAG, "onMeasure called. \nwidthMode " + widthModern + " \nheightMode " + heightSpecrn + " \nwidthSize " + widthSizern + " \nheightSize " + heightSizern + " \ngetItemCount() " + getItemCount());rnrn int width = 0;rn int height = 0;rn for (int i = 0; i < getItemCount(); i++) rn measureScrapChild(recycler, i,rn View.MeasureSpec.makeMeasureSpec(i, View.MeasureSpec.UNSPECIFIED),rn View.MeasureSpec.makeMeasureSpec(i, View.MeasureSpec.UNSPECIFIED),rn mMeasuredDimension);rnrn if (getOrientation() == HORIZONTAL) rn width = width + mMeasuredDimension[0];rn if (i == 0) rn height = mMeasuredDimension[1];rn rn else rn height = height + mMeasuredDimension[1];rn if (i == 0) rn width = mMeasuredDimension[0];rn rn rn rn switch (widthMode) rn case View.MeasureSpec.EXACTLY:rn width = widthSize;rn case View.MeasureSpec.AT_MOST:rn case View.MeasureSpec.UNSPECIFIED:rn rnrn switch (heightMode) rn case View.MeasureSpec.EXACTLY:rn height = heightSize;rn case View.MeasureSpec.AT_MOST:rn case View.MeasureSpec.UNSPECIFIED:rn rnrn setMeasuredDimension(width, height);rn rnrn private void measureScrapChild(RecyclerView.Recycler recycler, int position, int widthSpec,rn int heightSpec, int[] measuredDimension) rn try rn View view = recycler.getViewForPosition(0);//fix 动态添加时报IndexOutOfBoundsExceptionrnrn if (view != null) rn RecyclerView.LayoutParams p = (RecyclerView.LayoutParams) view.getLayoutParams();rnrn int childWidthSpec = ViewGroup.getChildMeasureSpec(widthSpec,rn getPaddingLeft() + getPaddingRight(), p.width);rnrn int childHeightSpec = ViewGroup.getChildMeasureSpec(heightSpec,rn getPaddingTop() + getPaddingBottom(), p.height);rnrn view.measure(childWidthSpec, childHeightSpec);rn measuredDimension[0] = view.getMeasuredWidth() + p.leftMargin + p.rightMargin;rn measuredDimension[1] = view.getMeasuredHeight() + p.bottomMargin + p.topMargin;rn recycler.recycleView(view);rn rn catch (Exception e) rn e.printStackTrace();rn finally rn rn rnrnrn然后 rn FullyLinearLayoutManager linearLayoutManager = new FullyLinearLayoutManager(mContext);rn mRecyclerView.setLayoutManager(linearLayoutManager);rnrn这是重写的ScrollView rnpublic class MyScrollview extends ScrollView rn private int downX;rn private int downY;rn private int mTouchSlop;rnrn public MyScrollview(Context context) rn super(context);rn mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();rn rnrn public MyScrollview(Context context, AttributeSet attrs) rn super(context, attrs);rn mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();rn rnrn public MyScrollview(Context context, AttributeSet attrs, int defStyleAttr) rn super(context, attrs, defStyleAttr);rn mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();rn rnrn @Overridern public boolean onInterceptTouchEvent(MotionEvent e) rn int action = e.getAction();rn switch (action) rn case MotionEvent.ACTION_DOWN:rn downX = (int) e.getRawX();rn downY = (int) e.getRawY();rn break;rn case MotionEvent.ACTION_MOVE:rn int moveY = (int) e.getRawY();rn if (Math.abs(moveY - downY) > mTouchSlop) rn return true;rn rn rn return super.onInterceptTouchEvent(e);rn rn
ScrollView 嵌套RecyclerView 进入页面自动跳转到RecyclerView 上面
ScrollView 嵌套RecyclerView  进入页面自动跳转到recyclerView 上面 貌似是RecyclerView 自动获得了焦点,在代码里面 让处于ScrollView 顶端的某个控件获得焦点 即可。 我是让一个textView 获得的焦点。这样进入该页面。就会从ScrollView开始显示了。 tv_goodsName.setFocusabl
Recyclerview嵌套Recyclerview案列
Recyclerview嵌套Recyclerview ,外层列表,内层网格,支持上拉下拉刷新
ScrollView嵌套RecyclerView滑动冲突解决以及RecyclerView在最顶部问题
为了防止页面出现时ScrollView偏上 这是RecyclerView焦点问题要让其失去焦点 recyclerview.setFocusable(false); 在则滑动出现卡顿现象则要让其停止滑动 recyclerview.setNestedScrollingEnabled(false); ...
解决Scrollview 嵌套RecyclerView 出现的滑动冲突和RecyclerView显示不全问题
解决办法:      RecyclerView 设置setNestedScrollingEnabled(false); 然后在RecycleView外面包裹一层相对布局,并设置 android:descendantFocusability=&quot;blocksDescendants&quot; 即可 &amp;lt;RelativeLayout android:layout_width=&quot;mat...
RecyclerView里面嵌套RecyclerView注意事项
RecyclerView嵌套RecyclerView的条目,项目中可能会经常有这样的需求,但是我们将子条目设置为RecyclerView之后,却显示不出来。原因是:必须先设置子RecylcerView的高度。你要花精力确定出子RecyclerView里面条目的高度,然后从而确定子RecyclerView的高度,设置给子RecylcerView,这样做RecyclerView就可以正确显示出子Rec
RecyclerView 嵌套RecyclerView 或者 ScrollView当中嵌套RecyclerView ,子View会自动滚动到顶部
问题如图 此问题一开始我以为是我在fragment当中,返回和移动的时候调用了adpater的notifyItemChange方法情况和notifyItemChanged(int position) 引起的返回时RecyclerView页面不自然的跳动 一样,但是发现我并没有调用过此方法,所以我想是不是有可能是子 recyclerView 抢了焦点导致子 RecyclerView自动滚动到了第一行
解决Scrollview 嵌套recyclerview不能显示,高度不正常的问题
我们先看一个效果,问题说的就是中间的Grid效果在Scrollview 嵌套recyclerview显示问题,在Android Api 24是好的,不过在5,1,1版本(api 22)缺出现了问题 最近项目中,有一个商品详情页面,页面有好几个网格页面,大家说,我们大可以用GridView去做,但是需要方的要求是,我们的网格的中间的线怎么做呢,对于Gri...
RecyclerView中嵌套RecyclerView导致自动滚动
RecyclerView中嵌套RecyclerView时,在项目中加载八张图或者九张图布局时使用RecyclerView添加,外面大布局使用RecyclerView。或者类似于微信朋友圈。其本质都是内部子控件获得焦点导致滚动布局自动滚动。
RecyclerView中嵌套CardView
在RecyclerView中嵌套CardView
RecyclerView与ScrollView嵌套,抢占焦点的问题
ScrollView嵌套RecyclerView的时候,会自动滑倒RecyclerView所在的位置,是应为RecyclerView一上来就会自动获得焦点的原因,避免这种情况,就是让ScrollView的顶部的控件获得焦点mainImage.setFocusableInTouchMode(true); mainImage.requestFocus(); ...
解决ScrollView嵌套RecyclerView的显示及滑动问题
项目中时常需要实现在ScrollView中嵌入一个或多个RecyclerView。这一做法通常会导致如下几个问题 页面滑动卡顿 ScrollView高度显示不正常 RecyclerView内容显示不全 本文将利用多种方式分别解决上述问题 滑动卡顿解决方案 若只存在滑动卡顿这一问题,可以采用如下两种简单方式快速解决 利用Recycler...
scrollView嵌套recyclerView 显示不全(已解决)
毕竟recycleView 是新的控件,所以在最近的项目中我尽可能 的用recyclerView而不使用ListView,所以今天就碰见了一个跟listView的一个通用的问题,就是嵌套之后显示不全, 查了很多资料,有说自定义GridLayoutManager的 也有说自定义scrollView的 ,但是我按照上面的说法,都没有成功,最后我用下面的方法成功消除这种bug,
解决scrollView与recyclerView的滑动嵌套问题
问题1.平时开发中很多情况会需要使用ScrollView里面嵌套RecyclerView或者是ListView的情况,然而不做任何处理就会出现滑动卡顿的问题。同时在当你的项目版本是7.0。使用嵌套就会出现recyclerView显示不全的问题。刚开始会很懵逼。那么这篇文章就是用来填这个坑的。首先是滑动卡顿的问题。因为ScrollView和RecyclerView都有自己的滑动事件,这样就造成了冲突。
ScrollView嵌套RecyclerView显示不完整问题
今天遇到了一个小问题,首页展示列表在被ScrollView嵌套时显示不完整。部分手机显示是正常的,但是较新的手机会出现这个问题。这个问题其实遇见过好多次了,这次特记录下,也方便以后直接来自己的博客来粘贴,哈哈! &amp;lt;RelativeLayout android:layout_width=&quot;match_pa...
ScrollView嵌套RecyclerView滑动冲突相关问题
最近实际应用中遇到了滑动冲突的相关问题,在解决过程中,有些需要注意的问题,特别记录一下。 一、应用场景 在解决具体问题之前,先介绍下实际应用场景及问题状况。 从图中可以看出,一个ScrollView内部嵌套三个RecyclerView,其中两个RecyclerView是横向,一个RecyclerView是纵向。 在这个场景下,出现了滑动冲突问题,主要表现为横向RecyclerView滑动不灵...
开发笔记——ScrollView嵌套RecyclerView滑动冲突
解决ScrollView嵌套RecyclerView时滑动冲突问题 &amp;amp;amp;lt;ScrollView android:layout_width=&amp;amp;quot;match_parent&amp;amp;quot; android:layout_height=&amp;amp;quot;match_parent&amp;amp;quot; android:scrollbars=&amp;amp;quot;none&amp;amp;quot;&amp;
解决ScrollView嵌套RecyclerView无法滑动的问题
通过View事件的拦截方法解决ScrollView嵌套RecyclerView无法滑动的问题前提:这里先介绍两个View的方法onInterceptTouchEvent方法(只有ViewGroup才有) 返回true: 代表对事件进行拦截, 拦截后事件就无法传到子View中, 也就是无法调用子View的onTouchEvent等方法, 返回false: 代表不对事件进行拦截, 子View可以接
scrollview嵌套listview产生的滑动冲突(recyclerview)
问题描述: 布局最外层是ScrollView,里面有ListView,固定高度约400dp(加载数据后远大于400dp) 当点击到ListView区域时,事件被拦截,无法滑动ListView 解决方案: 继承ScrollView,覆写onInterceptTouchEvent方法,点击操作发生在ListView的区域的时候,返回false让ScrollView的onTouchEvent接收...
RecyclerView中嵌套RecyclerView的时候出现子RecyclerView显示不全的问题解决
如图首页整个界面是一个RecyclerView,根据不同的type创建不同的view来显示: RecyclerView常见问题解决方案: 1:首先查看RecyclerView在设置Adapter前有没有被LayoutManager管理(如果没有肯定连显示都不显示) 2:查看子RecyclerView的子项布局最外层有没有把高度设置成match_parent,如果设置了(只显示一行) 3...
RecyclerView 嵌套 ScrollView 在6.0系统显示不完全
&lt;RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:descendantFocusability="blocksDescendants"&gt; &lt;android.support.v7.widget.Recyc...
关于RecyclerView与ScrollView嵌套产生的坑
RecyclerView 多重嵌套有时候是很常见的用法,但是lz在这里发现了一个惊人的bug,导致oom。 当Recyclerview 外部嵌套了一层可滑动布局时,lz表示我发现一个大的bug,当RecyclerView 外层嵌套滑动布局时  RecyclerView 的回收复用机制将失效,lz亲测 当外层是滑动布局时 RecyclerView 的Adapter 中的 item 滑出屏幕以及 ...
RecyclerView 与 scrollview嵌套不显示问题
项目中需要在scrollview里面嵌套一个水平滑动的列表视图,然后巴拉巴拉用RecyclerView写完,run项目后打开一看 RecyclerView视图没有显示出来,然后看网上出的一些主意 1、 在ScorrlView 里面加一行 android:fillViewport="true" 亲测还是不显示 2、 在RecyclerView外层嵌套   测试后发现还是不显示,但是
recyclerview嵌套scrollview滑动卡顿的问题
recyclerview.setLayoutManager(new GridLayoutManager(getActivity(),2)){ @Override public boolean canScrollvertically(){ return false; } }最主要的是点setLayoutManager重写他的canScrollvertically
scrollView 嵌套recyclerView 滑动粘合解决
我用半个小时做总结    昨天下午5店发现这个问题,就在刚刚才解决。 解决办法很简单,而且从昨天到现在 在我眼前飘了不少于10次才被我识别出它的强大 需求描述: 首页是一个很长的内容丰满的页面, 里面有两个卡片,此二卡片有个列表可展开,列表展开后卡片铺满一页,重点是,当卡片展开后,此首页就只有一个卡片无其他了,更别提滚动了。但是不能简简单单将其他内容VIew.Gone掉,因为
Scrollview嵌套Recyclerview出现的问题解决办法
解决了Scrollview嵌套Recyclerview出现的滑动卡顿和显示不完全的问题
相关热词 c# stream 复制 android c# c#监测窗口句柄 c# md5 引用 c# 判断tabtip 自己写个浏览器程序c# c# 字符串变成整数数组 c#语言编程写出一个方法 c# 转盘抽奖 c#选中treeview