做项目的时候,直接用到了一个ProgressDialog,需要实现全屏的效果,如下图所示,功能跑起来的时候发现不是全屏,只是包裹了当前的内容,如下图所示,不过查找一些资料,把问题解决了。
ProgressDialog 继承自AlertDialog,AlertDialog继承自Dialog,实现DialogInterface接口。
ProgressDialog的创建方式有两种,一种是new Dialog ,一种是调用Dialog的静态方法Dialog.show()。
// 方式一:new Dialog final ProgressDialog dialog = new ProgressDialog(this); dialog.show(); // 方式二:使用静态方式创建并显示,这种进度条只能是圆形条,设置title和Message提示内容 ProgressDialog dialog2 = ProgressDialog.show(this, "提示", "正在登陆中"); // 方式三 使用静态方式创建并显示,这种进度条只能是圆形条,这里最后一个参数boolean indeterminate设置是否是不明确的状态 ProgressDialog dialog3 = ProgressDialog.show(this, "提示", "正在登陆中", false); // 方式四 使用静态方式创建并显示,这种进度条只能是圆形条,这里最后一个参数boolean cancelable 设置是否进度条是可以取消的 ProgressDialog dialog4 = ProgressDialog.show(this, "提示", "正在登陆中", false, true); // 方式五 使用静态方式创建并显示,这种进度条只能是圆形条,这里最后一个参数 DialogInterface.OnCancelListener // cancelListener用于监听进度条被取消 ProgressDialog dialog5 = ProgressDialog.show(this, "提示", "正在登陆中", true, true, cancelListener);
方式五中需要一个cancelListener,代码如下:
private OnCancelListener cancelListener = new OnCancelListener() { @Override public void onCancel(DialogInterface dialog) { // TODO Auto-generated method stub Toast.makeText(MainActivity.this, "进度条被取消", Toast.LENGTH_LONG).show(); } };
本文的知识点:
1、实现ProgressDialog的全屏效果
2、接口回调推荐的方式
项目要求实现的效果.png
刚开始实现的效果.png
代码实现:
1、布局
2、核心代码
Window window = getWindow(); WindowManager.LayoutParams layoutParams = window.getAttributes(); layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; layoutParams.height = WindowManager.LayoutParams.MATCH_PARENT; layoutParams.gravity = gravity; window.setAttributes(layoutParams);
3、接口回调的实现方式
public OnClickCancelListener mOnClickCancelListener; public void setOnClickCancelListener(OnClickCancelListener onClickCancelListener){ this.mOnClickCancelListener = onClickCancelListener; } public interface OnClickCancelListener{ void singleClick(); }
4、接口回调的调用方式
mLoadingProgressDialog.setOnClickCancelListener(new LoadingProgressDialog.OnClickCancelListener() { @Override public void singleClick() { LogUtil.d(TAG,"点击取消查询==========="); isContinueQuery = true; dismissPayResultLoadingDialog(); } });
5、全部代码实现
public class LoadingProgressDialog extends ProgressDialog { private static final String TAG = LoadingProgressDialog.class.getSimpleName(); public LoadingProgressDialog(Context context) { super(context,R.style.style_custon_dialog); setCancelable(false); setCanceledOnTouchOutside(false); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.custom_dialog_all_loading); Window window = getWindow(); WindowManager.LayoutParams layoutParams = window.getAttributes(); layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; layoutParams.height = WindowManager.LayoutParams.MATCH_PARENT; layoutParams.gravity = gravity; window.setAttributes(layoutParams); Button benCancel = (Button) findViewById(R.id.btn_cancel); benCancel.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { LogUtil.d(TAG,"benCancel================"); mOnClickCancelListener.singleClick(); } }); } public OnClickCancelListener mOnClickCancelListener; public void setOnClickCancelListener(OnClickCancelListener onClickCancelListener){ this.mOnClickCancelListener = onClickCancelListener; } public interface OnClickCancelListener{ void singleClick(); } }