Android OnClickListener内部服务

Android OnClickListener内部服务,android,Android,我正在尝试创建一个图像,它位于所有android服务窗口的顶部,这是onCreate方法: @Override public void onCreate() { super.onCreate(); mWindowsManger = (WindowManager) getSystemService(WINDOW_SERVICE); mFloatingImage = new ImageView(this); mFloating

我正在尝试创建一个图像,它位于所有android服务窗口的顶部,这是
onCreate
方法:

@Override
    public void onCreate() {
        super.onCreate();
        mWindowsManger = (WindowManager) getSystemService(WINDOW_SERVICE);

        mFloatingImage = new ImageView(this);
        mFloatingImage.setImageResource(R.mipmap.ic_launcher);
        mFloatingImage.setAlpha(0.5f);
        mParams = new WindowManager.LayoutParams(
                WindowManager.LayoutParams.WRAP_CONTENT,
                WindowManager.LayoutParams.WRAP_CONTENT,
                WindowManager.LayoutParams.TYPE_PHONE,
                WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
                PixelFormat.TRANSLUCENT);

        mParams.gravity = Gravity.TOP | Gravity.LEFT;
        mParams.x = 0;
        mParams.y = 100;
        mFloatingImage.setClickable(true);
        mFloatingImage.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                   System.out.print("clicked");
            }
        });


        mWindowsManger.addView(mFloatingButtonImage, mParams);
    }
我的问题是,
OnClickListener
不工作,而
OnTouchListener
工作

有没有办法在服务中实现
OnClikListener

    @Override
    public void onCreate() {
    super.onCreate();
    mWindowsManger = (WindowManager) getSystemService(WINDOW_SERVICE);

    mFloatingImage = new ImageView(this);
    mFloatingImage.setImageResource(R.mipmap.ic_launcher);
    mFloatingImage.setAlpha(0.5f);
    mParams = new WindowManager.LayoutParams(
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.TYPE_PHONE,
            WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
            PixelFormat.TRANSLUCENT);

    mParams.gravity = Gravity.TOP | Gravity.LEFT;
    mParams.x = 0;
    mParams.y = 100;
    mFloatingImage.setClickable(true);
    mWindowsManger.addView(mFloatingButtonImage, mParams);
    mFloatingImage.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
               System.out.print("clicked");
        }
    });

}
但我现在就这么做,这对我很有用:

    rl = (RelativeLayout) findViewById(R.id.rl);
    b = (Button) findViewById(R.id.button1);

    img = new ImageView(MainActivity.this);

    img.setImageResource(R.drawable.ic_launcher);

    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
            (int) LayoutParams.WRAP_CONTENT, (int) LayoutParams.WRAP_CONTENT);

    params.addRule(RelativeLayout.CENTER_IN_PARENT);

    img.setLayoutParams(params);

    rl.addView(img);

    img.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            Toast.makeText(getBaseContext(), "Image Clicked",
                    Toast.LENGTH_SHORT).show();
        }
    });
这样做:

    @Override
    public void onCreate() {
    super.onCreate();
    mWindowsManger = (WindowManager) getSystemService(WINDOW_SERVICE);

    mFloatingImage = new ImageView(this);
    mFloatingImage.setImageResource(R.mipmap.ic_launcher);
    mFloatingImage.setAlpha(0.5f);
    mParams = new WindowManager.LayoutParams(
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.TYPE_PHONE,
            WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
            PixelFormat.TRANSLUCENT);

    mParams.gravity = Gravity.TOP | Gravity.LEFT;
    mParams.x = 0;
    mParams.y = 100;
    mFloatingImage.setClickable(true);
    mWindowsManger.addView(mFloatingButtonImage, mParams);
    mFloatingImage.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
               System.out.print("clicked");
        }
    });

}
但我现在就这么做,这对我很有用:

    rl = (RelativeLayout) findViewById(R.id.rl);
    b = (Button) findViewById(R.id.button1);

    img = new ImageView(MainActivity.this);

    img.setImageResource(R.drawable.ic_launcher);

    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
            (int) LayoutParams.WRAP_CONTENT, (int) LayoutParams.WRAP_CONTENT);

    params.addRule(RelativeLayout.CENTER_IN_PARENT);

    img.setLayoutParams(params);

    rl.addView(img);

    img.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            Toast.makeText(getBaseContext(), "Image Clicked",
                    Toast.LENGTH_SHORT).show();
        }
    });
这样做:

    @Override
    public void onCreate() {
    super.onCreate();
    mWindowsManger = (WindowManager) getSystemService(WINDOW_SERVICE);

    mFloatingImage = new ImageView(this);
    mFloatingImage.setImageResource(R.mipmap.ic_launcher);
    mFloatingImage.setAlpha(0.5f);
    mParams = new WindowManager.LayoutParams(
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.TYPE_PHONE,
            WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
            PixelFormat.TRANSLUCENT);

    mParams.gravity = Gravity.TOP | Gravity.LEFT;
    mParams.x = 0;
    mParams.y = 100;
    mFloatingImage.setClickable(true);
    mWindowsManger.addView(mFloatingButtonImage, mParams);
    mFloatingImage.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
               System.out.print("clicked");
        }
    });

}
但我现在就这么做,这对我很有用:

    rl = (RelativeLayout) findViewById(R.id.rl);
    b = (Button) findViewById(R.id.button1);

    img = new ImageView(MainActivity.this);

    img.setImageResource(R.drawable.ic_launcher);

    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
            (int) LayoutParams.WRAP_CONTENT, (int) LayoutParams.WRAP_CONTENT);

    params.addRule(RelativeLayout.CENTER_IN_PARENT);

    img.setLayoutParams(params);

    rl.addView(img);

    img.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            Toast.makeText(getBaseContext(), "Image Clicked",
                    Toast.LENGTH_SHORT).show();
        }
    });
这样做:

    @Override
    public void onCreate() {
    super.onCreate();
    mWindowsManger = (WindowManager) getSystemService(WINDOW_SERVICE);

    mFloatingImage = new ImageView(this);
    mFloatingImage.setImageResource(R.mipmap.ic_launcher);
    mFloatingImage.setAlpha(0.5f);
    mParams = new WindowManager.LayoutParams(
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.TYPE_PHONE,
            WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
            PixelFormat.TRANSLUCENT);

    mParams.gravity = Gravity.TOP | Gravity.LEFT;
    mParams.x = 0;
    mParams.y = 100;
    mFloatingImage.setClickable(true);
    mWindowsManger.addView(mFloatingButtonImage, mParams);
    mFloatingImage.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
               System.out.print("clicked");
        }
    });

}
但我现在就这么做,这对我很有用:

    rl = (RelativeLayout) findViewById(R.id.rl);
    b = (Button) findViewById(R.id.button1);

    img = new ImageView(MainActivity.this);

    img.setImageResource(R.drawable.ic_launcher);

    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
            (int) LayoutParams.WRAP_CONTENT, (int) LayoutParams.WRAP_CONTENT);

    params.addRule(RelativeLayout.CENTER_IN_PARENT);

    img.setLayoutParams(params);

    rl.addView(img);

    img.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            Toast.makeText(getBaseContext(), "Image Clicked",
                    Toast.LENGTH_SHORT).show();
        }
    });

阿披实答得很好。我的答案是他答案的子集 您只需拨打:

mWindowsManger.addView(mFloatingButtonImage, mParams);
首先,然后:

mFloatingImage.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
           System.out.print("clicked");
    }
});

在添加视图到视图层次结构之前,单击侦听器可能不起作用

阿披舍克Das给出了很好的答案。我的答案是他答案的子集 您只需拨打:

mWindowsManger.addView(mFloatingButtonImage, mParams);
首先,然后:

mFloatingImage.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
           System.out.print("clicked");
    }
});

在添加视图到视图层次结构之前,单击侦听器可能不起作用

阿披舍克Das给出了很好的答案。我的答案是他答案的子集 您只需拨打:

mWindowsManger.addView(mFloatingButtonImage, mParams);
首先,然后:

mFloatingImage.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
           System.out.print("clicked");
    }
});

在添加视图到视图层次结构之前,单击侦听器可能不起作用

阿披舍克Das给出了很好的答案。我的答案是他答案的子集 您只需拨打:

mWindowsManger.addView(mFloatingButtonImage, mParams);
首先,然后:

mFloatingImage.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
           System.out.print("clicked");
    }
});

在将视图添加到视图层次结构之前,单击侦听器可能无法工作

您是否动态创建了ImageView?是的,它基于本教程,我不会告诉您您做错了什么。。你必须找到它;-)您是否动态创建了ImageView?是的,它基于本教程,我不会告诉您您做错了什么。。你必须找到它;-)您是否动态创建了ImageView?是的,它基于本教程,我不会告诉您您做错了什么。。你必须找到它;-)您是否动态创建了ImageView?是的,它基于本教程,我不会告诉您您做错了什么。。你必须找到它;-)