- 50
- 0
- 约1.33千字
- 约 1页
- 2023-07-05 发布于上海
- 举报
RecyclerView横竖屏切换时,item⾃动滑动的问题
问题现象:
第⼀发现这个问题是做视频列表播放与全屏播放切换的时候。
需求就是,做⼀个列表,item全是视频,点击每个item的播放按钮,可以直接在列表中播放,播放过程中点击该item的全屏播放按钮,视频可以
⽆缝切换的全屏播放。
为了实现视频⽆缝切换成全屏横屏播放,⾸先在item的全屏播放按钮的点击事件⾥将当前item中的VideoView移除,addView进Activity的
decotView中;然后,再同时让Aciticity全屏和横屏。从全屏播放回来时,会再让Activity从横屏旋转会竖屏,同时再将VideoView重新
在Activity切换竖屏后,视屏应该保持播放,但播放的视频的item的位置被滑动了,有
addView回之前item中。这个时候问题就出现了,
⼀半都滑出了屏幕,只有⼀半视频露出来。
但进⼊横屏前,这个item明明在RecyclerView中间的位置,返回竖屏应该还在这个位置继续播放视
频,才能保证⽤户体验,才能让⽤户有视频播放列表直接播放和全屏播放切换的流畅感。
经过再三推理,最后猜测是因为横竖屏切换导致了获取焦点的item的变化。在竖屏时,此时recycleview的⾼是⼿机的⾼,假如可以显⽰3个
item,那么焦点就在中间item上。当旋转到横屏时,此时recycleView的⾼变成⼿机的宽,只能显⽰⼀个item了,刚才那个获取焦点的item可能
会在屏幕外,此时焦点就会落在正在显⽰的这个item上。这个时候再从横屏切回竖屏,recycleView就会将这个item显⽰在中间位置,从⽽导致
recycleView的内部的item会有⼀个滑动,item的位置较切换到横屏前发⽣位移。
解决办法 :
给RecycleView添加⼀个控制焦点获取的属性——android:descendantFocusability=blocksDescendants;
将值写成blocksDescendants;不懂可以百度⼀下descendantFocusability的作⽤。添加了这⼀⾏之后,横竖屏切换,recycleView就不会再
获取焦点。没有焦点变化的问题,recycleView也就不会再去调整item的位置,⾃然也就会保持item的位置总是不变,除⾮认为滑动
recycleView。
androidx.recyclerview.widget.RecyclerView
android:id=@+id/rlv_content
android:layout_width=match_parent
android:layout_height=match_parent
android:descendantFocusability=blocksDescendants/
原创力文档

文档评论(0)