1.代码
1 class NotifyAlertDlg (var callback : ((dlg : NotifyAlertDlg) -> Unit)? = null): DialogFragment() {
2
3 lateinit var binding : NotifyAlertBinding
4
5 fun initBinding(){
6 binding.notifyDlgClose.setOnClickListener(this::onCloseClicked)
7 binding.notifyAlertOk.setOnClickListener(this::onOpenClicked)
8 }
9 fun onCloseClicked(v : View){
10 dialog?.dismiss()
11 }
12 fun onOpenClicked(v : View){
13 callback?.invoke(this)
14 }
15
16 override fun show(transaction: FragmentTransaction, tag: String?): Int {
17 return super.show(transaction, tag)
18 }
19
20 override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
21 binding = NotifyAlertBinding.inflate(inflater,container,false)
22 initBinding()
23 return binding.root
24 }
25
26 override fun onActivityCreated(savedInstanceState: Bundle?) {
27 super.onActivityCreated(savedInstanceState)
28 }
29
30 override fun onStart() {
31 context?.let {
32 initDialog(it)
33 }
34 super.onStart()
35 }
36 fun initDialog(context: Context){
37 dialog?.apply {
38 setCancelable(true) //取消
39 setCanceledOnTouchOutside(true) //点击外部不消失的方法
40
41 }
42 val window = dialog?.window?.apply {
43 setBackgroundDrawableResource(R.color.transparent) //如果不设置背景,有白色的直角边。
44 decorView.setPadding(32,0,32,0) //设置背景后,在layout中的margin失效,在这里设置
45 }
46 if(window == null){
47 return
48 }
49 val params = window.attributes.apply {
50 width = (window.windowManager.defaultDisplay.width * 0.91f).toInt()//按比例显示
51 height = WRAP_CONTENT
52 gravity = Gravity.CENTER
53 dimAmount = 0.3f //设置Dialog弹出时背景的透明度
54 horizontalMargin = 0f //设置Dialog水平方向的间距
55 verticalMargin = 0f //设置Dialog垂直方向的间距
56 // verticalWeight = 0.5f
57 // horizontalWeight = 0.5f
58 x = 0 //设置Dialog显示时X轴的坐标,具体屏幕X轴的偏移量
59 y = 0 //设置Dialog显示时Y轴的坐标,距离屏幕Y轴的偏移量
60 alpha = 1f //设置Dialog的透明度
61 windowAnimations = 0 //设置Dialog显示和消失时的动画
62
63 }
64 window.attributes = params as WindowManager.LayoutParams?
65 }
66 }
2.dialog的布局
1 <?xml version="1.0" encoding="utf-8"?>
2 <androidx.constraintlayout.widget.ConstraintLayout
3 xmlns:android="http://schemas.android.com/apk/res/android"
4 xmlns:app="http://schemas.android.com/apk/res-auto"
5 android:layout_gravity="center"
6 android:background="@drawable/notify_bg"
7 android:layout_width="match_parent"
8 android:layout_height="match_parent">
9
10 <ImageView
11 android:id="@+id/notify_dlg_close"
12 android:layout_width="48dp"
13 android:layout_height="48dp"
14 android:padding="16dp"
15 app:layout_constraintBottom_toTopOf="@+id/notify_dlg_content"
16 app:layout_constraintEnd_toEndOf="parent"
17 app:layout_constraintTop_toTopOf="parent"
18 app:layout_constraintVertical_chainStyle="packed"
19 app:srcCompat="@mipmap/close" />
20
21 <TextView
22 android:id="@+id/notify_dlg_title"
23 android:layout_width="wrap_content"
24 android:layout_height="wrap_content"
25 android:text="通知栏未打开"
26 android:textColor="#353535"
27 android:textSize="20sp"
28 android:textStyle="bold"
29 app:layout_constraintBottom_toTopOf="@+id/notify_dlg_content"
30 app:layout_constraintEnd_toEndOf="parent"
31 app:layout_constraintStart_toStartOf="parent"
32 app:layout_constraintTop_toTopOf="@+id/notify_dlg_close" />
33
34 <View
35 android:id="@+id/bottom_line"
36 android:layout_width="0dp"
37 android:layout_height="2px"
38 android:background="@color/textNoFocus"
39 app:layout_constraintBottom_toTopOf="@+id/notify_alert_ok"
40 app:layout_constraintEnd_toEndOf="parent"
41 app:layout_constraintStart_toStartOf="parent"
42 app:layout_constraintTop_toBottomOf="@+id/notify_alert_icon" />
43
44 <TextView
45 android:id="@+id/notify_dlg_content"
46 android:layout_width="0dp"
47 android:layout_height="72dp"
48 android:layout_marginStart="16dp"
49 android:layout_marginTop="16dp"
50 android:layout_marginEnd="16dp"
51 android:gravity="center"
52 android:text="通知栏可展示完整的警报功能,\n\n是否现在打开?"
53 android:textColor="#3a3a3a"
54 app:layout_constraintBottom_toTopOf="@+id/notify_alert_icon"
55 app:layout_constraintEnd_toEndOf="parent"
56 app:layout_constraintStart_toStartOf="parent"
57 app:layout_constraintTop_toBottomOf="@+id/notify_dlg_close" />
58
59 <TextView
60 android:id="@+id/notify_alert_ok"
61 android:layout_width="0dp"
62 android:layout_height="64dp"
63 android:gravity="center"
64 android:text="去打开"
65 android:textColor="@color/notify_txt"
66 android:textStyle="bold"
67 app:layout_constraintBottom_toBottomOf="parent"
68 app:layout_constraintEnd_toEndOf="parent"
69 app:layout_constraintStart_toStartOf="parent"
70 app:layout_constraintTop_toBottomOf="@+id/bottom_line" />
71
72 <ImageView
73 android:id="@+id/notify_alert_icon"
74 android:layout_width="72dp"
75 android:layout_height="72dp"
76 android:layout_marginTop="16dp"
77 android:layout_marginBottom="16dp"
78 app:layout_constraintBottom_toTopOf="@+id/bottom_line"
79 app:layout_constraintDimensionRatio="1"
80 app:layout_constraintEnd_toEndOf="parent"
81 app:layout_constraintStart_toStartOf="parent"
82 app:layout_constraintTop_toBottomOf="@+id/notify_dlg_content"
83 app:srcCompat="@drawable/ic_notify_toast" />
84
85 </androidx.constraintlayout.widget.ConstraintLayout>
3.使用
1 fun notifyToast(){
2 val dlg = NotifyAlertDlg().apply { callback = this@SettingFrgmt::onDialogClicked }
3 dlg.show(requireFragmentManager(),"NotifyDlg")
4 }