我的布局中有一个Recyclerview和一个EditText。
当我在EditText外部点击(即点击Recyclerview)时,我希望Recyclerview获得焦点,而EditText视图则松散焦点。我不能让这个工作。如果我在Recyclerview上方放置一个空的FrameLayout,一切都按预期工作,但我不能滚动Recyclerview。为什么我不能将Recyclerview设置为可点击和可聚焦?
我在布局xml中设置了这些属性
android:clickable="true"
android:focusable="auto"
android:focusableInTouchMode="true"
android:focusedByDefault="true"
在我的Recyclerview / FrameLayout上。
答案 0 :(得分:2)
您的xml标记无效的原因是Android处理点击的方式。每个事件都通过布局的视图层次结构。首先,布局的顶级父级接收事件。如果顶级布局不处理事件,那么它将被传递给它下面的子节点,依此类推。
在您的情况下,触摸事件首先发送到FrameLayout,因为它被处理,事件不会到达RecyclerView,因此您无法滚动。
处理触摸的正确方法是在RecyclerView和子视图上设置onTouchListener。首先调用RecyclerView上的onTouch
。您可以处理所有分析(您可以检查x和y,还可以查看触摸是否属于子视图。您还可以动态更改每个视图的焦点)。
如果您不希望孩子也处理触摸return true;
。否则return false;
和触摸事件将触发子视图的onTouchListener。