2010-12-11 107 views

回答

32

我认为你需要使用这些方法之一,以便能够截获该事件之前被发送到相应的组件:

Activity.dispatchTouchEvent(MotionEvent) - 这允许你的活动,以拦截所有触摸事件,他们是前发送到窗口。

ViewGroup.onInterceptTouchEvent(MotionEvent) - 这允许ViewGroup在事件被分派到子视图时观察事件。

ViewParent.requestDisallowInterceptTouchEvent(boolean) - 在父视图中调用此函数以指示不应使用onInterceptTouchEvent(MotionEvent)拦截触摸事件。

更多信息here

希望有所帮助。

+1

是否有更简单的方法来传递事件以在父视图中触发onClick和onLongClick,或者我必须自己实现它们? – shiami 2010-12-12 13:59:40

+0

看看这个:http://stackoverflow.com/questions/2136696/pass-event-to-parent-view 可能你可能想尝试传递相同的点击侦听器到其他实例的建议,即使我不'不知道它是否会奏效,但可能值得一试。 – 2010-12-12 16:58:10

+0

下面的答案是更清洁 – JPM 2013-12-23 19:00:24

157

声明你TextView不可点击/可聚焦使用android:clickable="false"android:focusable="false"v.setClickable(false)v.setFocusable(false)。点击事件现在应该发送给TextView的父母。

注:

为了实现这个,你必须点击添加到其直接parent。或将 android:clickable="false"android:focusable="false"设置为其直接父母以将听众传递给进一步的父母

+1

哦,如果我能给这个+100我会。一直试图弄清楚如何使一个点击只能在ViewPager中工作,而不是在使用TouchImageView实现onTouch的适配器布局中!这个解决方案像一个魅力。 – JPM 2013-12-23 18:59:07

+0

完美地工作。比例外答案好得多。 – Rooster242 2014-06-16 19:04:43

+0

但如果我想处理EditText的Focus change事件呢? – 2015-01-28 09:15:34

9

有时只有这有助于:

View child = parent.findViewById(R.id.btnMoreText); 
    child.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      View parent = (View) v.getParent(); 
      parent.performClick(); 
     } 
    }); 

另一个变体,作品并不总是:

child.setOnClickListener(null); 
4

儿童
android:duplicateParentState="true" 

则意见得到它绘制状态(集中,按下等)从它的直接父母而不是从它自己。 你可以为父母设置onclick,它可以点击孩子的号码

3

如果你的TextView创建点击问题,而不是从你的xml文件中删除android:inputType=""

+0

我不知道为什么,但是这对我来说是诀窍。谢谢! – 2018-02-25 10:51:50

相关问题