从用户操作中禁用整个活动

有没有简单的方法来禁用用户与一个活动交互。 当有一个动作正在运行时(和标题栏中的旋转进度条)

编辑:因为它似乎我不够清楚我的意思是说:虽然我已经有一个旋转的进度条,用户仍然能够推动活动的任何button,我想禁用用户能够做到这一点任务正在运行。 不过,我不希望逐一禁用屏幕上的每个项目。

谢谢,杰森

Solutions Collecting From Web of "从用户操作中禁用整个活动"

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

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

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

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

编辑:如果你想添加一个function的禁用和灰显显示,你需要添加你的XML布局文件填充父级的线性布局。 将其背景设置为#B0000000,并将其可见性设置为“已完成”。 比编程式将其可见性设置为可见。

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

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

 protected boolean enabled = true; public void enable(boolean b) { enabled = b; } @Override public boolean dispatchTouchEvent(MotionEvent ev) { return enabled ? super.dispatchTouchEvent(ev) : true; } 

然后,只需要禁用并启用活动的正常事件处理,就调用enable(true/false)

捆绑ProgressDialog使用AsyncTask。

  1. 的AsyncTask

  2. 进度对话框

另一个有用的例子

http://www.screaming-penguin.com/node/7746

我已经解决了这个使用自定义的方法 – 我不想这样做:

 public static void setViewGroupEnabled(ViewGroup view, boolean enabled) { int childern = view.getChildCount(); for (int i = 0; i< childern ; i++) { View child = view.getChildAt(i); if (child instanceof ViewGroup) { setViewGroupEnabled((ViewGroup) child, enabled); } child.setEnabled(enabled); } view.setEnabled(enabled); } 

如果有人find更好的方法,我想听听它! 谢谢。

我解决了这个问题,在XML布局的最后添加了一个全屏幕的空白图像,并在空白点击处理程序中添加了空白点击处

在drawables文件夹中创build一个透明的PNG文件。

在引用图像的XML布局的末尾添加全屏ImageView:

 ... <ImageView android:layout_width="match_parent" android:layout_height="match_parent" app:srcCompat="@drawable/img_mask" android:id="@+id/imgMask" android:scaleType="fitXY" android:visibility="gone" android:onClick="doNothingClick" /> 

为图像添加空单击手柄以捕获用户触摸:

 public void doNothingClick(View v){ // do nothing with the click } 

添加代码禁用用户触摸:

 private void StopTouches(int duration){ findViewById(R.id.imgMask).setVisibility(View.VISIBLE); Handler handler = new Handler(); handler.postDelayed(new Runnable() { @Override public void run() { findViewById(R.id.imgMask).setVisibility(View.GONE); } }, duration); } 

SpinningProgress在标题栏中:

 //onCreate(): activity.requestWindowFeature(FEATURE_INDETERMINATE_PROGRESS); //and then: activity.setProgressBarIndeterminate(boolean indeterminate) 

都在Activity类中

另一个select是使用进度对话框(你可能想把它设置为false)。