Dialog實現全局Loading加載框
很多人在實現Loading加載框的時候,都是在當前的頁面隱藏一個Loading布局,需要加載的時候,顯示出來,加載完再隱藏
使用Dialog實現Loading框可以實現低耦合。
效果圖
自定義Loading類
package ……;
import ……;
/** * Created by kongqw on 2015/12/3. */
public abstract class Loading extends Dialog {
public abstract void cancle();
public Loading(Context context) {
super(context, R.style.Loading);
// 加載布局
setContentView(R.layout.view_loading);
// 設置Dialog參數
Window window = getWindow();
WindowManager.LayoutParams params = window.getAttributes();
params.gravity = Gravity.CENTER;
window.setAttributes(params);
}
// TODO 封裝Dialog消失的回調
@Override
public void onBackPressed() {
// 回調
cancle();
// 關閉Loading
dismiss();
}
}
給自定義的Dialog添加自定義屬性
在values文件夾下styles.xml里添加屬性
<resources>
……
<style name="Loading" parent="@android:style/Theme.Dialog">
<item name="android:windowFrame">@null</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowNoTitle">true</item>
<!-- 設置背景色 透明-->
<item name="android:background">@android:color/transparent</item>
<item name="android:windowBackground">@android:color/transparent</item>
<!-- 設置是否顯示背景 -->
<item name="android:backgroundDimEnabled">true</item>
<!-- 設置背景透明度 -->
<item name="android:backgroundDimAmount">0.6</item>
<!-- 設置點擊空白不消失 -->
<item name="android:windowCloseOnTouchOutside">false</item>
</style>
</resources>
Loading布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content">
<TextView android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="#88888888" android:gravity="center" android:textColor="#FFFF0000" android:padding="10dp" android:text="Loading" />
</RelativeLayout>
使用
初始化
cancle()是按返回鍵,Loading框關閉的回調,可以做取消加載請求的操作。
// 添加Loading
Loading mLoading = new Loading(this) {
@Override
public void cancle() {
}
};
顯示Loading框
// 顯示Loading
mLoading.show();
關閉Loading框
// 關閉Loading
mLoading.dismiss();