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调用该函数是有问题的,小伙伴们还需注意

猜你喜欢

转载自blog.csdn.net/qq_28643195/article/details/108363728
今日推荐