显示对话框时,Android将触摸事件发送到主活动
我有一个显示对话框时,Android将触摸事件发送到主活动,android,android-activity,ontouchlistener,android-dialogfragment,Android,Android Activity,Ontouchlistener,Android Dialogfragment,我有一个DialogFragment,它是onCreateDialog()看起来像 Dialog dialog = new Dialog(getActivity(), R.style.Theme_Translucent_NoTitleBar); dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); dialog.setContentView(parentView); dialog.getWindow().setLayout(LayoutPar
DialogFragment
,它是onCreateDialog()
看起来像
Dialog dialog = new Dialog(getActivity(), R.style.Theme_Translucent_NoTitleBar);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(parentView);
dialog.getWindow().setLayout(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.R.color.transparent));
parentView.setOnTouchListener(onTouchListener);
return dialog;
private OnTouchListener onTouchListener = new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
Bundle bundle = getArguments();
int[] coordinates = bundle.getIntArray(COORDINATES);
int radius = bundle.getInt(RADIUS);
float x = event.getX();
float y = event.getY();
Log.d(TAG, "called touch");
if (Math.pow(x - coordinates[0], 2) + Math.pow((y - coordinates[1]), 2) < Math.pow(
radius, 2)) {
getActivity().dispatchTouchEvent(event);
Log.d(TAG, "bubbled");
}
return false;
}
};
这个侦听器看起来像
Dialog dialog = new Dialog(getActivity(), R.style.Theme_Translucent_NoTitleBar);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(parentView);
dialog.getWindow().setLayout(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.R.color.transparent));
parentView.setOnTouchListener(onTouchListener);
return dialog;
private OnTouchListener onTouchListener = new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
Bundle bundle = getArguments();
int[] coordinates = bundle.getIntArray(COORDINATES);
int radius = bundle.getInt(RADIUS);
float x = event.getX();
float y = event.getY();
Log.d(TAG, "called touch");
if (Math.pow(x - coordinates[0], 2) + Math.pow((y - coordinates[1]), 2) < Math.pow(
radius, 2)) {
getActivity().dispatchTouchEvent(event);
Log.d(TAG, "bubbled");
}
return false;
}
};
private-OnTouchListener-OnTouchListener=new-OnTouchListener(){
@凌驾
公共布尔onTouch(视图v,运动事件){
Bundle=getArguments();
int[]坐标=bundle.getIntArray(坐标);
int半径=bundle.getInt(半径);
float x=event.getX();
float y=event.getY();
Log.d(标签“称为触摸”);
if(Math.pow(x坐标[0],2)+Math.pow((y坐标[1]),2)
我希望活动能够处理特定区域中的触摸事件(参见下图中的圆圈),从而单击活动中的按钮。否则,我希望对话框处理触摸事件
对于记录,是的,正在调用日志语句“bubbled
”,因此显然getActivity().dispatchTouchEvent(event)
方法没有按预期工作
我注意到,有时甚至调用了活动中的
onTouchEvent()
方法,但按钮仍然没有响应,给出了什么?嘿,你找到了这个问题的解决方案吗?嘿@Ramesh,我不太记得几年前我是如何解决这个问题的,但似乎我选择了使用popupwindow而不是对话。嘿,我尝试了上面的链接,但没有为我工作。我的问题是,我把这个对话框放在键盘上(表情符号的对话框片段),我想通过片段事务隐藏它,并保持对话框打开和透明,以便键盘可见,并通过对话框将事件发送到键盘。我做了一个变通办法,在不需要对话框时将其高度设置为0。谢谢你的回复。保持此状态,以防在我的场景中有人遇到此问题:)