带有取消和确定按钮的对话框
-
效果图
-
view_action_dialog.xml
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
</data>
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:cardCornerRadius="5dp"
app:cardElevation="0dp"
app:cardBackgroundColor="@color/common_bg"
>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/tv_msg"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@color/common_text_black"
android:textSize="18sp"
tools:text="@string/camera_permission_tips"
android:padding="30dp"
android:gravity="center" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/divider" />
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="50dp">
<com.google.android.material.button.MaterialButton
style="@style/TextButton"
android:id="@+id/btn_negative"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent"
tools:text="@string/refuse"
android:background="@null"
android:textSize="16sp"
android:textColor="@color/common_text_black_light" />
<View
android:id="@+id/divider_v"
android:layout_width="1dp"
android:layout_height="match_parent"
android:background="@color/divider" />
<com.google.android.material.button.MaterialButton
style="@style/TextButton"
android:id="@+id/btn_positive"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent"
tools:text="@string/refuse"
android:background="@null"
android:textSize="16sp"
android:textColor="@color/common_blue" />
</LinearLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>
</layout>
- TextButton.xml
<!--纯文字按钮-->
<style name="TextButton" parent="Widget.MaterialComponents.Button.UnelevatedButton">
<item name="android:paddingLeft">0dp</item>
<item name="android:paddingRight">0dp</item>
<item name="android:paddingTop">0dp</item>
<item name="android:paddingBottom">0dp</item>
<item name="android:insetLeft">0dp</item>
<item name="android:insetRight">0dp</item>
<item name="android:insetTop">0dp</item>
<item name="android:insetBottom">0dp</item>
<item name="android:minHeight">0dp</item>
<item name="android:minWidth">0dp</item>
<item name="android:height">50dp</item>
<item name="android:textSize">16sp</item>
<item name="android:textColor">@color/white</item>
<item name="textAllCaps">false</item>
<item name="backgroundTint">@color/white</item>
</style>
- koltin
package com.lzk.libcommon.widget
import android.graphics.Color
import android.graphics.drawable.ColorDrawable
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.view.Window
import android.widget.Button
import androidx.appcompat.app.AlertDialog
import androidx.databinding.DataBindingUtil
import androidx.fragment.app.DialogFragment
import com.lzk.libcommon.R
import com.lzk.libcommon.databinding.ViewActionDialogBinding
/**
* @Author: LiaoZhongKai
* @Date: 2021/7/20 19:46
* @Description: 带按钮的dialog
*/
class ActionDialog private constructor(): DialogFragment() {
private var mMsg: String? = null
private var mNegativeButton: String? = null
private var mPositiveButton: String? = null
private var mOutsideCancelable: Boolean = false
private var mNegativeListener: ((dialog: ActionDialog) -> Unit)? = null
private var mPositiveListener: ((dialog: ActionDialog) -> Unit)? = null
private lateinit var mBinding: ViewActionDialogBinding
override fun onStart() {
super.onStart()
dialog?.window?.apply {
attributes = attributes.apply {
dimAmount = 0.3f
}
//设置宽度为屏幕宽度的90%
val metrics = resources.displayMetrics
setLayout((metrics.widthPixels * 0.9).toInt(), ViewGroup.LayoutParams.WRAP_CONTENT)
}
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
dialog?.apply {
requestWindowFeature(Window.FEATURE_NO_TITLE)
setCanceledOnTouchOutside(false)
window?.apply {
//去掉DialogFragment内部的背景色
setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
//去掉Padding
decorView.setPadding(0,0,0,0)
//设置dialog的宽高,gravity等
val lp = attributes
attributes = lp
}
}
mBinding = DataBindingUtil.inflate(inflater, R.layout.view_action_dialog,container,false)
return mBinding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
initView()
}
private fun initView(){
mMsg?.let {
mBinding.tvMsg.text = it
}
mNegativeButton?.let {
mBinding.btnNegative.text = it
}
mNegativeListener?.let { listener ->
mBinding.btnNegative.setOnClickListener {
listener.invoke(this)
}
}
mPositiveButton?.let {
mBinding.btnPositive.text = it
}
mPositiveListener?.let { listener ->
mBinding.btnPositive.setOnClickListener {
listener.invoke(this)
}
}
if (mNegativeButton.isNullOrEmpty()){
mBinding.btnNegative.visibility = View.GONE
mBinding.dividerV.visibility = View.GONE
}
this.dialog?.apply {
setCanceledOnTouchOutside(mOutsideCancelable)
setCancelable(mOutsideCancelable)
}
}
class Builder{
private var mMsg: String? = null
private var mNegativeButton: String? = null
private var mPositiveButton: String? = null
private var mNegativeListener: ((dialog: ActionDialog) -> Unit)? = null
private var mPositiveListener: ((dialog: ActionDialog) -> Unit)? = null
private var mOutsideCancelable: Boolean = false
fun setMessage(msg: String): Builder{
mMsg = msg
return this
}
fun setNegativeButton(text: String,clickListener: (dialog: ActionDialog) -> Unit): Builder{
mNegativeButton = text
mNegativeListener = clickListener
return this
}
fun setPositiveButton(text: String,clickListener: (dialog: ActionDialog) -> Unit): Builder{
mPositiveButton = text
mPositiveListener = clickListener
return this
}
fun setOutsideCancelable(cancelable: Boolean): Builder{
mOutsideCancelable = cancelable
return this
}
fun build(): ActionDialog{
val dialog = ActionDialog()
dialog.apply {
mMsg = this@Builder.mMsg
mNegativeButton = this@Builder.mNegativeButton
mNegativeListener = this@Builder.mNegativeListener
mPositiveButton = this@Builder.mPositiveButton
mPositiveListener = this@Builder.mPositiveListener
mOutsideCancelable = this@Builder.mOutsideCancelable
}
return dialog
}
}
}
- 使用
ActionDialog.Builder()
.setMessage(resources.getString(R.string.you_have_not_added_a_receiving_bank_account))
.setNegativeButton(resources.getString(R.string.think_again)){
it.dismiss()
}
.setPositiveButton(resources.getString(R.string.add)){
it.dismiss()
}
.build()
.show(supportFragmentManager,"")