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