美文网首页Android控件Android填坑记录
RecyclerView抢焦点自动滚动

RecyclerView抢焦点自动滚动

作者: 云飞扬1 | 来源:发表于2018-08-30 15:56 被阅读189次

    最近有个项目,其中有一个新闻详情页面,在新闻详情下面是一个用户评论列表,最底部有一个评论输入框,有点类似于今日头条的新闻详情页面。评论列表是采用RecyclerView开发的,点击底部评论输入框会弹出软键盘。发现有个比较诡异的现象,当软键盘缩回去的时候,评论列表RecyclerView老是会自动滚动到顶部。这样体验会比较差,有可能我本来在看某条评论信息,点击评论输入后又放弃,这个时候我肯定是希望页面停留在原来那个地方的。

    如下2张图所示,RecyclerView的header是一个WebView,用来加载新闻网页信息,其他列表项则是显示评论,点击底部评论弹出一个输入框以及软键盘,当软键盘取消的时候,RecyclerView自动滚动到了header顶部:


    原本列表位置 弹出输入法后

    通过查看源码以及参考网上别人的分析,原来这就是所谓的RecyclerView抢夺焦点现象。当输入框及软键盘显示出来的时候,整个界面的焦点是在这个输入框EditText上的,但是当取消软键盘的时候,界面焦点发生了变化,RecyclerView抢夺了焦点,进而导致界面自动滚动了。

    通过试验,采用以下方法解决了我的问题:
    在RecyclerView的父布局上增加“ android:focusable="true" android:focusableInTouchMode="true"”这2个配置。

    <RelativeLayout  
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:focusable="true"
        android:focusableInTouchMode="true"
        >
        <android.support.v7.widget.RecyclerView
            android:id="@+id/recyclerview"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            >
        </android.support.v7.widget.RecyclerView>
    </RelativeLayout>
    

    相关文章

      网友评论

        本文标题:RecyclerView抢焦点自动滚动

        本文链接:https://www.haomeiwen.com/subject/yjcrwftx.html