分享一个我日常开发当中使用到poupwindow
开发库,它可以帮我代替Dialog
的存在。基本弹框类的需求都是能够满足的,这个库的名称是XPopup
。
XPopup依赖
implementation 'com.github.li-xiaojun:XPopup:2.7.5'
我发表这篇博客的时,XPopup
在最新的版本是2.7.5。
内置弹框
开源库的作者分享了一波他内置的弹窗,看博客的小伙伴可以到时候直接用。
显示确认和取消对话框
这应该是App开发当中最常见的对话框了,这个库能帮我们简单实现:
XPopup.Builder(getContext()).asConfirm("我是标题", "我是内容") {
Toast.makeText(getContext(),"点击确认",Toast.LENGTH_SHORT).show()
}
.show()
显示带输入框的确认和取消对话框
XPopup.Builder(getContext()).asInputConfirm("我是标题", "请输入内容。") { text ->
Toast.makeText(getContext(),"输入内容:${text}",Toast.LENGTH_SHORT).show()
}
.show()
显示中间弹出的列表弹窗
XPopup.Builder(getContext())
.asCenterList("请选择一项", arrayOf("条目1", "条目2", "条目3", "条目4")) { position, text ->
Toast.makeText(getContext(),"点击内容:${text}",Toast.LENGTH_SHORT).show()
}
.show()
显示中间弹出的加载框
XPopup.Builder(getContext()).asLoading("正在加载中").show()
显示依附于某个View或者某个点的弹窗
XPopup.Builder(getContext())
.atView(v) // 依附于所点击的View,内部会自动判断在上方或者下方显示
.asAttachList(arrayOf("分享", "编辑", "不带icon"), intArrayOf(R.mipmap.ic_launcher, R.mipmap.ic_launcher) ) { _, text ->
Toast.makeText(getContext(), "点击内容:${text}",
Toast.LENGTH_SHORT).show()
}
.show()
自定义窗口示例
具体的示例会很多,但是自定义原理都是相通的,我拿一个自定义居中弹框举例:
class CustomPopup(context: Context) : CenterPopupView(context) {
// 返回自定义弹窗的布局
override fun getImplLayoutId(): Int = R.layout.custom_popup
// 执行初始化操作,比如:findView,设置点击,或者任何你弹窗内的业务逻辑
override fun onCreate() {
super.onCreate()
findViewById(R.id.tv_close).setOnClickListener {
dismiss() // 关闭弹窗
}
}
// 设置最大宽度,看需要而定,
override fun getMaxWidth(): Int {
return super.getMaxWidth()
}
// 设置最大高度,看需要而定
override fun getMaxHeight(): Int {
return super.getMaxHeight()
}
// 设置自定义动画器,看需要而定
override fun getPopupAnimator(): PopupAnimator? {
return super.getPopupAnimator()
}
/**
* 弹窗的宽度,用来动态设定当前弹窗的宽度,受getMaxWidth()限制
*
* @return
*/
override fun getPopupWidth(): Int {
return 0
}
/**
* 弹窗的高度,用来动态设定当前弹窗的高度,受getMaxHeight()限制
*
* @return
*/
override fun getPopupHeight(): Int {
return 0
}
}
使用自定义弹框
XPopup.Builder(getContext()).asCustom(CustomPopup(getContext())).show()
调用自定义弹窗就是上面一句代码就可以了,是不是很简单。
代码混淆
-dontwarn com.lxj.xpopup.widget.**
-keep class com.lxj.xpopup.widget.**{*;}
以上就是我使用这个开源库的心得,希望对看文章小伙伴有所帮助。