網路載入等待進度彈窗ProgressDialogUtil
阿新 • • 發佈:2018-12-21
public class ProgressDialogUtil { private static final int START_DIALOG = 0;//開始對話方塊 private static final int UPDATE_DIALOG = 1;//更新對話方塊 private static final int STOP_DIALOG = 2;//銷燬對話方塊 private static AlertDialog dialog = null; private static TextView title = null; private static Context context = null; private static Handler handler = new Handler(Looper.getMainLooper()) { public void handleMessage(android.os.Message msg) { String message = ""; switch (msg.what) { case START_DIALOG:// 啟動載入框 message = (String) msg.obj; if (dialog != null) { stopLoad(); startLoad(context, message); return; } init(message); isTouchDismiss(true); break; case UPDATE_DIALOG:// 更新載入框 message = (String) msg.obj; if (title.VISIBLE == View.VISIBLE) { if (TextUtils.isEmpty(message)) { title.setVisibility(View.GONE); } else { title.setText(message); } } else { if (!TextUtils.isEmpty(message)) { title.setText(message); title.setVisibility(View.VISIBLE); } } break; case STOP_DIALOG:// 停止載入框 if (dialog != null) { dialog.dismiss(); dialog.cancel(); dialog = null; title = null; } break; } } ; }; /** * @方法說明:載入控制元件與佈局 * @方法名稱:init * @返回值:void */ private static void init(String mssg) { if (isBackground(context)) {// 如果程式在後臺,則不載入 return; } if (null != context) { LayoutInflater flat = LayoutInflater.from(context); View v = flat.inflate(R.layout.loading, null); // v.setBackgroundColor(context.getResources().getColor(android.R.color.transparent)); // 建立對話 dialog = new AlertDialog.Builder(context, R.style.dialog).create(); // 設定返回鍵點選消失對話方塊 dialog.setCancelable(true); // 設定點選返回框外邊不消失 dialog.setCanceledOnTouchOutside(true); // 給該對話方塊增加系統許可權 // dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); // 顯示對話 dialog.show(); // 載入控制元件 title = (TextView) v.findViewById(R.id.loading_title); if (TextUtils.isEmpty(mssg)) { title.setVisibility(View.GONE); } else { title.setVisibility(View.VISIBLE); title.setText(mssg); } // 必須放到顯示對話方塊下面,否則顯示不出效果 Window window = dialog.getWindow(); // window.getAttributes().x = 0; // window.getAttributes().y = 0;//設定y座標 WindowManager.LayoutParams params = window.getAttributes(); params.width = ViewGroup.LayoutParams.WRAP_CONTENT; params.height = ViewGroup.LayoutParams.WRAP_CONTENT; params.gravity = Gravity.CENTER; // params.alpha = 0.6f; window.setAttributes(params); // 載入佈局元件 dialog.getWindow().setContentView(v); } } /** * @param msg * @方法說明:啟動對話方塊 * @方法名稱:startLoad * @返回值:void */ public static void startLoad(Context act, String msg) { // context = ActivityManager.newInstance().currentActivity();// 獲取當前的activity的上下文 context = act; if (context == null) { return; } if (isBackground(context)) {// 如果程式在後臺,則不載入 return; } Message mssage = new Message(); mssage.what = START_DIALOG; mssage.obj = msg; handler.sendMessage(mssage); } /** * @param msg * @方法說明:更新顯示的內容 * @方法名稱:UpdateMsg * @返回值:void */ public static void UpdateMsg(String msg) { Message message = new Message(); message.what = UPDATE_DIALOG; message.obj = msg; handler.sendMessage(message); } /** * @param flag * @方法說明:允許載入條轉動的時候去點選系統返回鍵 * @方法名稱:openCancelable * @返回值:void */ public static void openCancelable(boolean flag) { if (dialog != null) { dialog.setCancelable(flag); } } /** * @param isdimiss * @方法說明:允許點選對話方塊觸控消失 * @方法名稱:isTouchDismiss * @返回值:void */ public static void isTouchDismiss(boolean isdimiss) { if (dialog != null) { dialog.setCanceledOnTouchOutside(isdimiss); } } /** * @方法說明:讓警告框消失 * @方法名稱:dismiss * @返回值:void */ public static void stopLoad() { handler.sendEmptyMessage(STOP_DIALOG); } /** * @param context * @return * @方法說明:判斷當前應用程式是否後臺執行 * @方法名稱:isBackground * @返回值:boolean */ public static boolean isBackground(Context context) { ActivityManager activityManager = (ActivityManager) context .getSystemService(Context.ACTIVITY_SERVICE); List<ActivityManager.RunningAppProcessInfo> appProcesses = activityManager .getRunningAppProcesses(); for (ActivityManager.RunningAppProcessInfo appProcess : appProcesses) { if (appProcess.processName.equals(context.getPackageName())) { if (appProcess.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_BACKGROUND) { // 後臺執行 return true; } else { // 前臺執行 return false; } } } return false; } }
佈局檔案
<?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:card_view="http://schemas.android.com/apk/res-auto" android:layout_width="wrap_content" android:layout_height="wrap_content" card_view:cardBackgroundColor="@color/color_white_stranspate" card_view:cardCornerRadius="10dp" card_view:cardElevation="0dp"> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" android:orientation="horizontal" android:paddingBottom="10dp" android:paddingLeft="20dp" android:paddingRight="20dp" android:paddingTop="10dp"> <ProgressBar style="@style/loading" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/loading_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" android:gravity="center" android:textSize="14sp" /> </LinearLayout> </android.support.v7.widget.CardView>
樣式
<style name="loading"> <item name="android:indeterminate">true</item> <item name="android:indeterminateDrawable">@drawable/progressloading</item> <item name="android:indeterminateDuration">1200</item> <item name="android:indeterminateOnly">true</item> </style>