Android 一个封装好的很好用的Dialog(无黑角)

在Android开发中 Dialog的使用真的是再经常不过了,但是我们Android原生默认的Dialog的界面确实不太友好,所以我们要重写一个漂亮的简便的Dialog真的很重要了,今天我们分享下

第一步, 添加依赖

 implementation 'com.trello.rxlifecycle2:rxlifecycle-components:2.2.2'

第二步, 添加样式(添加之后就没有黑角了)

1,style下添加样式
  <!--自定义Dialog样式-->
    <style name="MyDialog" parent="AlertDialog.AppCompat">
        <item name="android:background">@android:color/transparent</item>
        <item name="android:backgroundDimEnabled">true</item>
        <item name="android:windowBackground">@drawable/dialog_shape</item>
    </style>
2,drawable下添加样式
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">

    <solid android:color="@color/white" />
    <stroke
            android:width="1px"
            android:color="@color/white" />
    <corners android:radius="5dp" />
</shape>

第三步, 编写BaseDialog

注:这里是一个方便后面写我们自己dialog的公共类,编写是为了后面的简便,可以看到里面写了很多易于我们调用的抽象方法
abstract class BaseDialog : RxDialogFragment() {

    open lateinit var mContext: Context
    private lateinit var rootView: View
    lateinit var mWindow: Window

    override fun onAttach(mContext: Context) {
        super.onAttach(mContext)
        this.mContext = mContext

    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setStyle(DialogFragment.STYLE_NORMAL, R.style.MyDialog)  //全屏

    }


    override fun onStart() {
        super.onStart()
        val dialog = dialog
        dialog!!.setCanceledOnTouchOutside(true)  //点击外部消失
        mWindow = dialog.window!!
        mWindow.setBackgroundDrawableResource(android.R.color.transparent)// 背景透明
    }

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        initIntent(arguments)
        rootView = inflater.inflate(layout, container, false)
        return rootView
    }

    open fun initIntent(arguments: Bundle?) {}

    abstract val layout: Int

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        initView()
        initEvent()
        initPresenter()
    }


    open fun initView() {}

    open fun initEvent() {}

    open fun initPresenter() {}

}

第四步,编写TestDialog

注:后面我们在使用dialog的时候,我们只需要继承BaseDialog即可
class TestDialog : BaseDialog() {

    override val layout = R.layout.g_dialog


    companion object {

      
        fun start(mContext: Context) {
        
            val dialog = TestdDialog()
            dialog.show((mContext as BaseActivity).supportFragmentManager, "")

        }

    }

//这一步如果大小和样式统一,也可以不调用
    override fun onStart() {
        super.onStart()
        mWindow.setGravity(Gravity.CENTER)
        mWindow.setWindowAnimations(R.style.MyDialog)
        mWindow.setLayout(
            (ScreenUtils.getScreenWidth() * 0.70).toInt(),
            (ScreenUtils.getScreenHeight() * 0.24).toInt()
        )
    }

    override fun initEvent() {
        g_dialog_ok.setOnClickListener {
         
            dismiss()
        }
        g_dialog_cancel.setOnClickListener {
            dismiss()
        }
    }


}

第五步,调用

TestDialog.start(this)
注意:由于代码是kotlin编写,用java的activity调用该函数是有问题的,小伙伴们还需注意
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值