整个屏幕的onClickListener

9

我正在制作一个闹钟应用。 我想要创建一个只有背景图片的活动页面。 当我在任意地方触摸屏幕时,音乐应该停止播放。

我考虑将图片作为ImageView展示... 但是无论如何设置参数,它都不能充满整个屏幕。

求助!


1
如果您想要触摸布局,请将点击监听器设置为布局本身。 - mohammed momn
谢谢 :) - Yogi_Bear
你能否发布相关代码、布局XML和Activity类? - Peshal
你可以实现onTouch事件方法。 - Piyush
7个回答

10

在您的页面布局中,请验证以下内容:

android:clickable="true"
android:focusable="true"
android:focusableInTouchMode="true"

如果想要实现该功能,可以尝试使用onTouchListener

接下来,请尝试:

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

那个不起作用!相反,ViewTreeObserver可以100%工作,请参考答案https://dev59.com/DXXYa4cB1Zd3GeqP3S9Q#18000128 - Harsh0021

2
这是将触摸事件放置在整个活动中的方法。
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;
        }
    }

}

1
如果您想触摸布局,请将点击监听器设置到布局本身。

1
让您的 Activity 或 Fragment 实现 OnClickListener 接口,然后将其分配为您的每个视图和布局的单击侦听器。在函数的第一行运行一些逻辑。
@override
public void onClick(view v)
{
   if(isMusicPlaying)
      stopMusic();

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

}

0

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

WindowManager实例具有addView()方法。通过正确的布局参数,它可以产生所描述的结果。


0

试试这个,将您的最顶层父视图作为参数传递给此方法

例如:stopMusicOnTouch(您的父视图);

    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);
        }
    }
}

你可以将其更改为ClickListener。 - Viswanath Lekshmanan

-1
最后,我为整个屏幕制作了一个按钮,并将其设置为半透明(但可见)。
它完美地工作了,我建议其他人也使用这种方法!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接