自定义Dialog

仿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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容