我想显示progressBar,而某些指令在后台执行,但我不想锁定屏幕。此代码锁定屏幕:
private class ConvertDataInBackground extends AsyncTask<Params, Void, Boolean> {
private MyProgressDialog mProgressDialog;
@Override
public void onPreExecute() {
if(mProgressDialog == null)
mProgressDialog = MyProgressDialog.show(mActivity, null, null);
}
@Override
protected Boolean doInBackground(Params...params) {
boolean conversionResult = executeConversion(params[0].item1, params[0].item2, params[0].item3);
return conversionResult;
}
@Override
protected void onPostExecute(Boolean result) {
try {
if(mProgressDialog.isShowing())
mProgressDialog.dismiss();
if(result) {
Toast toast = Toast.makeText(mActivity, R.string.conversion_result, Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
在后台执行指令可能需要一段时间,我希望用户能够使用该界面。 你还知道我们可以使用界面,而progressDialog显示在顶部吗?
答案 0 :(得分:4)
Android中的对话通常是模态的。您可以尝试创建对话框,然后将FLAG_NOT_TOUCH_MODAL添加到其窗口参数中 - 但我不确定它是否可行。它背后的想法将是这样的:
ProgressDialog dialog = new ProgressDialog(this);
dialog.setMessage(...);
dialog.setTitle(...);
dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
请注意,同时向您的活动布局添加ProgressBar
并在需要时显示而不是创建对话框可能更容易 - 事实上,这是Google文档推荐的内容。 Android developer's guide on dialogs有这样的说法:
避免使用ProgressDialog
Android包含另一个名为
ProgressDialog
的对话框,显示 带进度条的对话框。但是,如果您需要指示加载 或者不确定的进展,你应该遵循设计Progress & Activity
的指南并在您的ProgressBar
中使用{{1}} 布局。
答案 1 :(得分:2)
我认为在你的活动中你必须指定FLAG_KEEP_SCREEN_ON标志:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
对我而言,它有效。