Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
显示对话框时,Android将触摸事件发送到主活动_Android_Android Activity_Ontouchlistener_Android Dialogfragment - Fatal编程技术网

显示对话框时,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。谢谢你的回复。保持此状态,以防在我的场景中有人遇到此问题:)