Android onClickListener用于整个屏幕

Android onClickListener用于整个屏幕,android,android-layout,onclicklistener,Android,Android Layout,Onclicklistener,我正在做闹钟。 我想做一个布局部分为空的活动(背景上的照片除外) 我想做的是,如果我触摸屏幕上的任何地方,音乐就会停止 我想把img做成一个图像视图。。。 但是当我这样做的时候,它会在屏幕上显示(即使参数在整个屏幕上) 帮助?让您的活动或片段实现OnClickListener,然后将其指定为每个视图和/或布局的单击侦听器 在函数的第一行,运行一些逻辑 @override public void onClick(view v) { if(isMusicPlaying) stopM

我正在做闹钟。 我想做一个布局部分为空的活动(背景上的照片除外) 我想做的是,如果我触摸屏幕上的任何地方,音乐就会停止

我想把img做成一个图像视图。。。 但是当我这样做的时候,它会在屏幕上显示(即使参数在整个屏幕上)


帮助?

让您的活动或片段实现OnClickListener,然后将其指定为每个视图和/或布局的单击侦听器

在函数的第一行,运行一些逻辑

@override
public void onClick(view v)
{
   if(isMusicPlaying)
      stopMusic();

   // here run the rest of your logic
   if (v == someButton){}

}

在布局中,验证:

android:clickable="true"
android:focusable="true"
android:focusableInTouchMode="true"
然后尝试使用

然后尝试:

yourActivityLayout.setOnTouchListener(new View.OnTouchListener() {  
        @Override
        public boolean onTouch(View arg0, MotionEvent arg1) {
           // action to do
            return true;//always return true to consume event
        }
    });

这样做可以将触控事件置于整个活动中

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {

        if (event.getAction() == MotionEvent.ACTION_UP) {

            // do your work here
            return true;
        } else {
            return false;
        }
    }

}

您可以使用WindowManager,将您的布局覆盖到所有其他内容上(也可以覆盖状态栏和其他系统UI)


WindowManager实例具有addVieW()方法。使用正确的布局参数,它将生成描述的结果

尝试此方法,将最顶端的父对象作为此方法的参数传递

例如:stopMusicOnTouch(你的父母视图)

public void stopMusicOnTouch(视图){
//为非文本框视图设置触摸监听器以隐藏键盘。
如果(!(图像视图的视图实例)){
view.setOnTouchListener(新的OnTouchListener(){
公共布尔onTouch(视图v,运动事件){
//停止音乐
返回false;
}
});
}
//如果是布局容器,则在子对象上迭代并为递归设定种子。
if(视图组的视图实例){
对于(int i=0;i<((视图组)视图)。getChildCount();i++){
视图内部视图=((视图组)视图);
stopMusicOnTouch(内部视图);
}
}
}

如果您想触摸布局,请将click listener设置为布局本身

最后,我为整个屏幕制作了一个按钮,并使其透明(但可见)


它非常有效,我建议其他人使用它

如果您想触摸布局,请将click listener设置为布局,您应该将其作为答案!谢谢:)您能发布相关代码、布局xml和活动类吗?为此,您可以实现此事件方法,也可以将其更改为clicklistener,否则无法正常工作!取而代之的是ViewTreeObserver工作100%参考答案
    public void stopMusicOnTouch(View view) {

    //Set up touch listener for non-text box views to hide keyboard.
    if(!(view instanceof ImageView)) {

        view.setOnTouchListener(new OnTouchListener() {

            public boolean onTouch(View v, MotionEvent event) {
                // Stop music here
                return false;
            }

        });
    }

    //If a layout container, iterate over children and seed recursion.
    if (view instanceof ViewGroup) {

        for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {

            View innerView = ((ViewGroup) view).getChildAt(i);

            stopMusicOnTouch(innerView);
        }
    }
}