在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)