cod*_*lor 5 android touch-event android-layout android-activity
目前以下是我的应用程序的布局:
LinearLayout
----Button
----ScrollView
----RelativeLayout
----EditText
Run Code Online (Sandbox Code Playgroud)
我在所有这些之上创建了一个透明的 LinearLayout,实现了 OnTouchListener 并在 OnTouch() 内部,返回 false。因此,所有控件都移动到子级下方。但是在 LinearLayout 上,我无法处理 ACTION_MOVE 操作,因为此布局不消耗 MotionEvent 对象。有什么方法可以检测父视图和子视图中的所有触摸事件吗?
dispatchTouchEvent
您可以通过覆盖布局来实现这一点。
public class MyFrameLayout extends LinearLayout {
@Override
public boolean dispatchTouchEvent(MotionEvent e) {
// do what you need to with the event, and then...
return super.dispatchTouchEvent(e);
}
}
Run Code Online (Sandbox Code Playgroud)
然后使用该布局代替通常的 FrameLayout:
<com.example.android.MyFrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="10dip"
android:id="@+id/rootview">
...
Run Code Online (Sandbox Code Playgroud)
如果您需要阻止子视图接收事件,您也可以完全跳过超级调用,但我认为这种情况很少见。
这个答案是基于Romain Guy的答案的参考。
归档时间: |
|
查看次数: |
3154 次 |
最近记录: |