单击RecyclerView列表项 [英] Click through a RecyclerView list item
问题描述
我有一个RecyclerView
和LinearLayoutManager
和Adapter
:
@Override public int getItemViewType(int position) {
return position == 0? R.layout.header : R.layout.item;
}
这里是header.xml
:
<View xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/header"
android:layout_width="match_parent"
android:layout_height="@dimen/header_height"
/>
我想要实现的是在RecyclerView
中有一个孔,在其中可以单击RecyclerView
后面的任何内容.我尝试了以下属性的许多组合,但无济于事:
What I want to achieve is to have a hole in the RecyclerView
where I can click through to anything behind the RecyclerView
. I tried a lot of combinations the following attributes to no avail:
android:background="@android:color/transparent"
android:background="@null"
android:clickable="false"
android:focusable="false"
android:focusableInTouchMode="false"
android:longClickable="false"
我如何才能使列表中的第一项透明(允许触摸事件发生在其后面的任何东西),但仍让它占据空间呢?
推荐答案
您可以将所有孔"的OnClickListener
/OnTouchListener
设置为RecyclerView
后面的视图的父级,并委派任何MotionEvent
和该父级ViewGroup
的触摸处理的触摸事件.
You could set the OnClickListener
/OnTouchListener
of all of your "holes" to the parent of the view behind the RecyclerView
and delegate any of the MotionEvent
and touch events to that parent ViewGroup
's touch handling.
通过TWiStErRob更新:
Update by TWiStErRob:
class HeaderViewHolder extends RecyclerView.ViewHolder {
public HeaderViewHolder(View view) {
super(view);
view.setOnTouchListener(new OnTouchListener() {
@Override public boolean onTouch(View v, MotionEvent event) {
// http://stackoverflow.com/questions/8121491/is-it-possible-to-add-a-scrollable-textview-to-a-listview
v.getParent().requestDisallowInterceptTouchEvent(true); // needed for complex gestures
// simple tap works without the above line as well
return behindView.dispatchTouchEvent(event); // onTouchEvent won't work
}
});
XML中没有什么特别的需要,只是普通视图(问题中没有任何属性).
v.getParent()
是RecyclerView
,该long方法阻止了将手指放在小孔"上时开始滚动手势.
There's nothing special needed in the XML, just plain views (none of the attributes in the question).
v.getParent()
is the RecyclerView
and that long method stops it from starting a scroll gesture while holding your finger on the "hole".
我在列表中的空洞"视图也具有半透明的背景,但这无关紧要,因为我们是在手工进行触摸.
My "hole" view in the list also has a semi-transparent background, but that doesn't matter because we're hand-delivering the touches.
这篇关于单击RecyclerView列表项的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!