如何暂时禁用屏幕上的所有触摸并再次启用它

时间:2019-02-26 09:49:34

标签: android

Fragments上运行进程时如何禁用所有触摸事件。我们的设备内置有打印机。在打印并快速点击屏幕时,它会使应用程序崩溃,如何确保屏幕不可触摸?我尝试使用

getActivity().getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);

getActivity().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);

并且崩溃仍然发生。我还尝试在我的父母LinearLayout上添加一个ID,并尝试启用和禁用它。但仍然没有任何反应?它的替代代码是什么?谢谢!

错误日志

02-26 18:16:37.000 18941-18946/com.jti.mikee.jti_pos I/dalvikvm: threadid=3: reacting to signal 3 02-26 18:16:37.060 18941-18946/com.jti.mikee.jti_pos I/dalvikvm: Wrote stack traces to '/data/anr/traces.txt' 02-26 18:16:37.110 18941-18941/com.jti.mikee.jti_pos I/HAL_JNI: - native_printer_close(), result = 0 02-26 18:16:37.130 18941-18941/com.jti.mikee.jti_pos I/Choreographer: Skipped 357 frames! The application may be doing too much work on its main thread.02-26 18:16:40.740 18941-18941/com.jti.mikee.jti_pos A/libc: Fatal signal 6 (SIGABRT) at 0x00000419 (code=0), thread 18941 (i.mikee.jti_pos)

XML布局

https://ghostbin.com/paste/ob2fa

2 个答案:

答案 0 :(得分:1)

您可以通过技巧来完成。

  • 在根视图上方显示一个透明视图以禁用点击。
  • 隐藏该视图以启用点击

谢谢

答案 1 :(得分:0)

覆盖活动中的dispatchTouchEvent

    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        if (!isSomethingInProcess) {
            return super.dispatchTouchEvent(ev);
        } else {
            return false;
        }
    }