使用Dialog实现全局Loading加载框
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();