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 若是拿不到,程序会崩溃

浙公网安备 33010602011771号