1.自定义progressDialog的theme:
<!-- 自定义Dialog --> <style name="Custom_Progress" parent="@android:style/Theme.Dialog"> <!-- 无边框 --> <item name="android:windowFrame">@null</item> <!-- 是否浮现在activity之上 --> <item name="android:windowIsFloating">true</item> <item name="android:windowContentOverlay">@null</item> <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item> <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item> <item name="android:windowBackground">@android:color/transparent</item> <item name="android:windowNoTitle">true</item> <!--无遮罩效果--> <item name="android:backgroundDimEnabled">false</item> </style>
package com.ylj.progressdialogdemo; import android.app.Dialog; import android.content.Context; import android.view.Gravity; import android.view.View; import android.view.WindowManager; import android.widget.TextView; public class CustomProgressDialog extends Dialog { private static CustomProgressDialog dialog; public CustomProgressDialog(Context context) { super(context); } public CustomProgressDialog(Context context, int theme) { super(context, theme); } /** * 弹出自定义ProgressDialog * * @param context * 上下文 * @param message * 提示 * @param cancelable * 是否可取消 * @param cancelListener * 按下返回键监听 * @return */ public static CustomProgressDialog show(Context context, CharSequence message, boolean cancelable, OnCancelListener cancelListener) { if(dialog == null){ dialog = new CustomProgressDialog(context, R.style.Custom_Progress); } dialog.setTitle(""); dialog.setContentView(R.layout.layout_progress_dialog); if (message == null || message.length() == 0) { dialog.findViewById(R.id.tv_message).setVisibility(View.GONE); } else { TextView tv_message = (TextView) dialog.findViewById(R.id.tv_message); tv_message.setText(message); } // 按返回键是否取消 dialog.setCancelable(cancelable); // 监听返回键处理 dialog.setOnCancelListener(cancelListener); // 设置居中 dialog.getWindow().getAttributes().gravity = Gravity.CENTER; WindowManager.LayoutParams lp = dialog.getWindow().getAttributes(); // 设置背景层透明度 lp.dimAmount = 0.1f; dialog.getWindow().setAttributes(lp); dialog.show(); return dialog; } /** * 关闭dialog */ public static void dimiss() { if(dialog != null && dialog.isShowing()){ dialog.dismiss(); } } }
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:background="@drawable/progress_custom_bg" android:gravity="center_horizontal" android:orientation="vertical" android:paddingBottom="20dp" android:paddingLeft="25dp" android:paddingRight="25dp" android:paddingTop="20dp" > <ProgressBar android:id="@+id/pb" android:layout_width="40dp" android:layout_height="40dp" android:layout_gravity="center_horizontal" /> <TextView android:id="@+id/tv_message" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_marginTop="3dp" android:textSize="16sp" /> </LinearLayout>
package com.ylj.progressdialogdemo; import android.app.Activity; import android.os.AsyncTask; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; public class MainActivity extends Activity implements OnClickListener { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.btn_save).setOnClickListener(this); } @Override public void onClick(View v) { new LoginTask().execute(); } private class LoginTask extends AsyncTask<Void, Void, Void> { @Override protected void onPreExecute() { CustomProgressDialog.show(MainActivity.this, "登录中...", false, null); super.onPreExecute(); } @Override protected Void doInBackground(Void... params) { try { new Thread().sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } return null; } @Override protected void onPostExecute(Void result) { super.onPostExecute(result); CustomProgressDialog.dimiss(); } } }
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.ylj.progressdialogdemo.MainActivity" > <Button android:id="@+id/btn_save" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:text="登录" /> </RelativeLayout>
效果图如下: