Kotlin开发中AlertDialog如何替换默认正负按钮使用自定义按钮
自定义AlertDialog按钮实现方法
要替换AlertDialog默认的正负按钮,直接使用全自定义布局的方案灵活性最高,可完全适配设计需求,实现步骤如下:
- 第一步:编写自定义弹窗布局
新建布局文件layout/dialog_custom_exit.xml,可按需调整按钮数量、样式、排版,示例代码:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:padding="20dp"> <!-- 顶部图标 --> <ImageView android:layout_width="40dp" android:layout_height="40dp" android:src="@drawable/warning" android:layout_gravity="center_horizontal"/> <!-- 标题 --> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="خروج از برنامه " android:textSize="18sp" android:textStyle="bold" android:layout_marginTop="12dp" android:layout_gravity="center_horizontal"/> <!-- 提示内容 --> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="از برنامه خارج میشوید؟" android:layout_marginTop="8dp" android:layout_gravity="center_horizontal"/> <!-- 自定义按钮区域,可按需添加多个按钮 --> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginTop="20dp" android:gap="12dp"> <Button android:id="@+id/btn_cancel" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="خیر" android:background="@drawable/your_custom_btn_bg"/> <Button android:id="@+id/btn_confirm" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="بله" android:background="@drawable/your_custom_btn_bg"/> </LinearLayout> </LinearLayout>
- 第二步:修改Dialog逻辑,加载自定义布局
不再调用默认的setPositiveButton、setNegativeButton方法,直接绑定自定义布局内的按钮点击事件,示例代码:
private fun alertDialog() { // 加载自定义布局 val dialogView = LayoutInflater.from(requireContext()).inflate(R.layout.dialog_custom_exit, null) val builder: AlertDialog.Builder = AlertDialog.Builder(requireActivity()) // 设置自定义布局到AlertDialog builder.setView(dialogView) builder.setCancelable(false) val alertDialog = builder.create() // 绑定取消按钮事件 dialogView.findViewById<Button>(R.id.btn_cancel).setOnClickListener { alertDialog.dismiss() } // 绑定确认按钮事件 dialogView.findViewById<Button>(R.id.btn_confirm).setOnClickListener { // 退出应用建议用finish替代System.exit(0),符合Android生命周期规范 requireActivity().finish() alertDialog.dismiss() } alertDialog.show() }
如果你只需要替换底部按钮、保留AlertDialog默认的标题和消息样式,也可以在调用
alertDialog.show()之后,隐藏系统自动生成的正负按钮控件,再动态插入自定义按钮布局到默认的按钮区域,全自定义布局的适配成本更低,更推荐使用。
内容的提问来源于stack exchange,提问作者AmirHossein
相关产品推荐
相关产品推荐

