本文所述是通过自定义ProgressDialog实现弹出“加载中……”,效果如下图:
1、xml布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ll_dialog_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#00000000"
android:orientation="vertical">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/round_bg"
android:gravity="center"
android:padding="10dp"
android:orientation="horizontal">
<ImageView
android:id="@+id/dialog_img"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/loading"/>
<TextView
android:id="@+id/dialog_txt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
android:text="@string/dialog_txt"
android:textSize="12sp"
android:textColor="@color/colorDialogTxt"/>
</LinearLayout>
</LinearLayout>
2、自定义ProgressDialog
public class MyProgressDialog extends ProgressDialog {
private static ProgressDialog progressDialog;
public MyProgressDialog(Context context){
super(context);
}
public MyProgressDialog(Context context,int theme){
super(context, theme);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LayoutInflater inflater = LayoutInflater.from(getContext());
// 得到加载view
View v = inflater.inflate(R.layout.myprogressdialog, null);
// 加载布局
LinearLayout layout = (LinearLayout) v.findViewById(R.id.ll_dialog_view);
// ImageView控件
ImageView dialogImage = (ImageView) v.findViewById(R.id.dialog_img);
// 加载动画
Animation animation = AnimationUtils.loadAnimation(getContext(),R.anim.dialog);
// 显示动画
dialogImage.startAnimation(animation);
//为显示dialog的圆角,不加会出现四个黑棱角
getWindow().setBackgroundDrawable(new BitmapDrawable());
setContentView(layout, new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT));
}
public static void showDialog(Context context,String msg){
progressDialog=new MyProgressDialog(context, R.style.dialogBoxTheme);
progressDialog.setCancelable(false);// 不可以用“返回键”取消
progressDialog.setCanceledOnTouchOutside(false);//不可点击进度框外部取消
progressDialog.setMessage(msg);
progressDialog.show();
}
public static void closeDialog(){
if (progressDialog != null && progressDialog.isShowing()) {
progressDialog.dismiss();
progressDialog = null;
}
}
}
3、进度条样式主题
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!--dialog主题-->
<style name="dialogBoxTheme" parent="@android:style/Theme.Dialog">
<!--背景-->
<item name="android:background">#00000000</item>
<!--边框-->
<item name="android:windowFrame">@null</item>
<!--是否浮现在activity之上-->
<item name="android:windowIsFloating">true</item>
<!--半透明-->
<item name="android:windowIsTranslucent">true</item>
<!--标题-->
<item name="android:windowNoTitle">true</item>
<!--模糊-->
<item name="android:backgroundDimEnabled">false</item>
<!--字体颜色-->
<item name="android:textColor">@color/colorDialogTxt</item>
<item name="android:windowBackground">@null</item>
</style>
</resources>
//显示加载中...
LoadingDialog.showLoading(this,"加载中...");
在执行你的程序之前加上上面一句,即可显示加载中……对话框。
LoadingDialog.closeLoading();
程序执行完后调用上面一句即可关闭。
5、源码