仿IOS自定义的Dialog:

Screenshot_2016-01-15-14-45-08-024.png
1、Util帮助类创建dialog
public class DialogUtils {
public static Dialog createLoadingDialog(Context context, String msg) {
LayoutInflater inflater = LayoutInflater.from(context);
View v = inflater.inflate(R.layout.layout_loading_dialog, null);
// 得到加载view
LinearLayout layout = (LinearLayout) v.findViewById(R.id.dialog_view);
// 加载布局
TextView msgTV = (TextView) v.findViewById(R.id.tv_msg);
msgTV.setText(msg);
Dialog loadingDialog = new Dialog(context, R.style.loading_dialog);// 创建自定义样式dialog
loadingDialog.setCancelable(false);// 不可以用"返回键"取消
loadingDialog.setContentView(layout, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT));
return loadingDialog;
}
}
<style name="loading_dialog" parent="android:Theme.Dialog">
<item name="android:windowFrame">@null</item> <!-- Dialog的windowFrame框为无 -->
<item name="android:windowBackground">@drawable/bg_toast</item> <!-- 设置dialog的背景 -->
<item name="android:windowNoTitle">true</item> <!-- 是否显示title -->
<item name="android:windowIsTranslucent">false</item> <!-- 是否半透明 -->
<item name="android:windowIsFloating">true</item> <!-- 是否浮现在activity之上 -->
<item name="android:windowContentOverlay">@null</item><!--也是个drawable,定义contentoverlay的背景-->
<item name="android:backgroundDimEnabled">false</item> <!-- 背景是否模糊显示 -->
</style>
2、布局文件 :loading_dialog.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/dialog_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:minWidth="124dp"
android:gravity="center_vertical|center"
android:orientation="vertical">
<ProgressBar
style="@style/progressbar_circle"
android:id="@+id/pb_loading"
android:layout_width="38dp"
android:layout_height="38dp"
android:layout_marginTop="20dp"
android:indeterminateDuration="1500"/>
<TextView
android:id="@+id/tv_msg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="12dp"
android:layout_marginBottom="6dp"
android:textSize="14sp"
android:textColor="@color/white"
tools:text="请稍后...."/>
</LinearLayout>
style:progressbar_circle.xml
<style name="progressbar_circle">
<item name="android:indeterminateDrawable">@drawable/progressbar_circle</item>
<item name="android:minWidth">40dp</item>
<item name="android:minHeight">40dp</item>
<item name="android:maxWidth">120dp</item>
<item name="android:maxHeight">120dp</item>
</style>
drawable:
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/loading"
android:fromDegrees="0"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="360">
</rotate>
3、在BaseActivity中进行show和dismiss操作。
···
private Dialog mWaitDlg;
private boolean mIsShowing;public void openWaitDialog() {
if (mWaitDlg != null) return;
mWaitDlg = DialogUtils.createLoadingDialog(this, "请稍候...");
mWaitDlg.show();
}
public void openWaitDialog(String msg) {
if (mWaitDlg != null) return;
mWaitDlg = DialogUtils.createLoadingDialog(this, msg);
mWaitDlg.show();
}
public void closeWaitDialog() {
if (mWaitDlg == null) return;
mWaitDlg.dismiss();
mWaitDlg = null;
}
···
源码:点击前往github