如何让ScrollView下方的RecyclerView在视图创建时程序化获取焦点
解决RecyclerView无法获取焦点的问题
你遇到的问题是因为ScrollView默认会主动抢占焦点,且视图初始化阶段直接调用requestFocus()可能因视图未完全绘制完成而失效,以下是几个可行的解决方法:
延迟请求焦点,确保视图已绘制完成
在视图的post方法中调用requestFocus(),这样能保证RecyclerView已经完成布局,有能力获取焦点:recyclerView.post { recyclerView.requestFocus() }Java版本:
recyclerView.post(new Runnable() { @Override public void run() { recyclerView.requestFocus(); } });禁止ScrollView自动获取焦点
在布局文件的ScrollView标签中添加以下属性,让它不再主动抢占焦点:<ScrollView ... android:focusable="false" android:focusableInTouchMode="false"> <!-- 内部内容 --> </ScrollView>之后再调用RecyclerView的
requestFocus()就能生效。强制清除ScrollView焦点后再请求
如果前两种方法不生效,可以先清除ScrollView的焦点,再让RecyclerView请求焦点,同样要放在post方法中:recyclerView.post { scrollView.clearFocus() recyclerView.requestFocus() }
内容的提问来源于stack exchange,提问作者Mymon
相关产品推荐
相关产品推荐

