Android:如何在进度条处于活动状态时禁用控件

Android:如何在进度条处于活动状态时禁用控件,android,android-layout,android-view,android-progressbar,Android,Android Layout,Android View,Android Progressbar,我在操作栏中“像往常一样”显示我的infinte进度栏: 真正的工作是在后台线程中完成的(异步任务) 问题是:UI上的所有控件都已启用,因此用户可以在长时间的过程完成之前继续修改基础数据 简单地禁用所有控件是不可能的,因为禁用EditText时,键盘也会被Android自动关闭 在后台工作中如何防止用户输入 谢谢 Chris尝试放置progressDialog.setcancelable(false)您正在尝试仅设置活动的属性。而是使用 ProgressDialog,这样Ui将无法访问 Prog

我在操作栏中“像往常一样”显示我的infinte进度栏:

真正的工作是在后台线程中完成的(异步任务)

问题是:UI上的所有控件都已启用,因此用户可以在长时间的过程完成之前继续修改基础数据

简单地禁用所有控件是不可能的,因为禁用EditText时,键盘也会被Android自动关闭

在后台工作中如何防止用户输入

谢谢


Chris

尝试放置
progressDialog.setcancelable(false)

您正在尝试仅设置活动的属性。而是使用 ProgressDialog,这样Ui将无法访问

ProgressDialog dialog = ProgressDialog.show(this, "", "Please wait...", true);
编辑: 如果不想使用ProgressDialog,请获取根布局并调用

layout.setEnabled(false)

你能做的就是打开一个不可见的对话框,防止它被取消。它将显示它下面的内容,但禁用所有底层用户交互。然后,一旦你完成了你的事业,你就干脆放弃它,继续你的生活:

Dialog mOverlayDialog = new Dialog(mContext, android.R.style.Theme_Panel); //display an invisible overlay dialog to prevent user interaction and pressing back
mOverlayDialog.setCancelable(false);
mOverlayDialog.show();  

如果其他人也面临同样的问题

要禁用编辑文本,请使用:
EditText.setFocusable(false)


要启用编辑:
EditText.setFocusableInTouchMode(true)

我没有ProgressBar(请参见上文),您将如何向用户显示您正在后台执行某些操作,并且您不希望任何用户触摸任何内容。。。。。最好的方法是使用progressdialog,它会在屏幕上显示加载…上面我的代码片段已经在操作栏的右角显示了一个无限的进度圈设置父视图的可单击性=false。。。我想这可以帮助你。。。我不明白你为什么要避免progressDialog??clickable==false并不阻止编辑EditText中的某些文本。我知道ProgressBar,但不想在这种情况下使用它。所以你希望整个布局变暗?变暗或至少是“只读”(=不可修改控件,不按下按钮…)布局。设置启用(false)不阻止编辑,例如编辑EditText中的某些文本。使用进度对话框而不是进度条是绝对正确的。该对话框将保持屏幕的焦点,防止任何用户活动到达下面的活动。但是layout.setEnabled(false)不会传播到它的子级,这使得该解决方案不可行。
Dialog mOverlayDialog = new Dialog(mContext, android.R.style.Theme_Panel); //display an invisible overlay dialog to prevent user interaction and pressing back
mOverlayDialog.setCancelable(false);
mOverlayDialog.show();