禁用用户操作的整个活动

Jas*_*son 45 android

是否有一种简单的方法可以禁用用户与活动进行交互.要在运行动作时执行(以及标题栏中的旋转进度条)

编辑:因为我似乎不够清楚我想说:虽然我已经有一个旋转的进度条,用户仍然能够按下活动上的任何按钮,我想禁止用户能够这样做任务正在运行.但我不想逐一禁用屏幕上的每个项目.

谢谢你,杰森

Uri*_*kel 129

要阻止用户触摸事件,请使用:

getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,
WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
Run Code Online (Sandbox Code Playgroud)

要获取触摸事件,请使用:

getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
Run Code Online (Sandbox Code Playgroud)

编辑:如果要添加禁用和灰色显示功能,则需要在xml布局文件中添加填充父级的线性布局.将其背景设置为#B0000000,将其可见性设置为Gone.比计划性地将其可见性设置为Visible.

  • 不要忘记,这只会阻止触摸事件,因此用户仍然可以通过其他输入方法(例如硬键盘)进行交互 (2认同)
  • 这不适用于半透明活动。在这种情况下,将点击后台活动中存在的内容。 (2认同)

ric*_*alm 9

如果需要在一段时间内禁用事件处理(例如,在运行动画时显示等待对话框),则可以覆盖活动的调度功能.

要禁用任何按钮的触摸/点击,请将这些成员/功能添加到您的活动中:

protected boolean enabled = true;

public void enable(boolean b) {
    enabled = b;
}

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
    return enabled ? 
        super.dispatchTouchEvent(ev) : 
        true;        
}
Run Code Online (Sandbox Code Playgroud)

然后enable(true/false) 在需要禁用和启用活动的正常事件处理时调用.