Android 自定义 dialog

首先新建一个自定义的 layout 文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@color/white"
    android:orientation="vertical">

    <ImageView
        android:layout_width="300dp"
        android:layout_height="115dp"
        android:src="@drawable/dialog_bg" />

    <TextView
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="10dp"
        android:layout_marginBottom="25dp"
        android:text="@string/open_vip"
        android:textColor="@color/dialog_vip_text_title"
        android:textSize="15sp"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/message"
        android:layout_width="216dp"
        android:layout_height="56dp"
        android:layout_gravity="center_horizontal"
        android:text="@string/open_vip_msg"
        android:textAlignment="center"
        android:textColor="@color/dialog_vip_text_msg"
        android:textSize="12sp" />

    <TextView
        android:id="@+id/open_vip_button"
        android:layout_width="250dp"
        android:layout_height="39dp"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="28dp"
        android:background="@drawable/open_vip_button_round_background"
        android:gravity="center"
        android:text="@string/open_vip_now"
        android:textColor="@color/white"
        android:textSize="15sp"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/cancel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="9dp"
        android:layout_marginBottom="10dp"
        android:padding="5dp"
        android:text="@string/cancel"
        android:textColor="@color/typeText"
        android:textSize="15sp"
        android:textStyle="bold" />
</LinearLayout>

在 style.xml 中加入自定义的 DialogStyle

<style name="MyDialog" parent="android:style/Theme.Dialog">
        <!--背景颜色及和透明程度-->
        <item name="android:windowBackground">@android:color/transparent</item>
        <!--是否去除标题 -->
        <item name="android:windowNoTitle">true</item>
        <!--是否去除边框-->
        <item name="android:windowFrame">@null</item>
        <!--是否浮现在activity之上-->
        <item name="android:windowIsFloating">true</item>
        <!--是否模糊-->
        <item name="android:backgroundDimEnabled">true</item>
    </style>

写一个继承于 Dialog 的类

      public class BaseDialog extends Dialog {
          private int res;

          public BaseDialog(@NonNull Context context, int theme, int res) {
              super(context, theme);
              setContentView(res);
              this.res = res;
            // setCanceledOnTouchOutside(false);
          }
      }

在其他使用到的地方添加即可

            BaseDialog dialog = new BaseDialog(activity, R.style.MyDialog, R.layout.remind_login_dialog);
            TextView loginBtn = dialog.findViewById(R.id.remind_login_btn);
            loginBtn.setOnClickListener(v -> {
                Intent intent = new Intent(activity, LoginActivity.class);
                activity.startActivity(intent);
            });
            dialog.create();
            dialog.show();

需要注意的是 dialog 构造函数中的 Context 若是拿不到,程序会崩溃

posted @ 2020-07-24 14:30  TzzTZhj  阅读(7)  评论(0)    收藏  举报