96SEO 2026-06-05 23:19 2
咱就是说你有没有想过那个Dialog,你用ViewBinding来封装了没?哈哈,你懂的,这可是个挺实用的东西,咱就来聊聊。
实现方法咱们先来瞅瞅怎么Zuo。咱要Zuo的,就是把Dialog的逻辑和ViewBinding结合起来让它geng方便、geng健壮。

class DialogScope<VB : ViewBinding> { private val window get = dialog.window private val context get = dialog.context private val params: WindowManager.LayoutParams? get = window?.attributes /* ---------------- 基础 ---------------- */ fun setCancelable { dialog.setCancelable } fun setCanceledOnTouchOutside { dialog.setCanceledOnTouchOutside } fun setDimAmount { window?.setDimAmount } fun dismiss { dialog.dismiss } /* ---------------- 固定宽高 ---------------- */ fun setWidth { params?.let { it.width = widthDp.dp window?.attributes = it } } fun setHeight { params?.let { it.height = heightDp.dp window?.attributes = it } } /* ---------------- 屏幕比例 ---------------- */ fun setScreenWidthAspect { val screenWidth = context.resources.displayMetrics.widthPixels params?.let { it.width = .toInt window?.attributes = it } }
fun setScreenHeightAspect {
val screenHeight = context.resources.displayMetrics.heightPixels
params?.let {
it.height = .toInt
window?.attributes = it
}
}
/* ---------------- 对齐方式 ---------------- */
fun setGravity {
params?.let {
it.gravity = gravity
window?.attributes = it
}
}}
你kan,这个`DialogScope`啊,它封装了一个`Dialog`对象和一个`ViewBinding`对象。咱们Ke以给Dialog设置各种属性,比如是否Ke以取消、是否在触摸外部取消、透明度等等。还Ke以在里面固定宽高、设置屏幕比例、控制对齐方式。咱就是说这些操作dou封装在了这个类里方便调用。
再封装Dialogclass XDialog<VB : ViewBinding> -> VB) : DialogFragment { private var _binding: VB? = null private val binding get = _binding!! private var dslBlock: -> Unit)? = null fun setDsl -> Unit) { dslBlock = block } override fun onCreateDialog: Dialog { return Dialog).apply { requestWindowFeature // 防止 requestFeature 异常 } } override fun onResume { //去除左右边距 dialog!!.window!!.decorView.setPadding super.onResume } override fun onCreateView: View { _binding = this.inflater.invoke return binding.root } override fun onStart { super.onStart dialog?.window?.let { window -> window.setBackgroundDrawable) // 先给一个默认值,防止 wrap_content 失效 val params = window.attributes params.width = ViewGroup.LayoutParams.WRAP_CONTENT params.height = ViewGroup.LayoutParams.WRAP_CONTENT window.attributes = params } dialog?.let { dslBlock?.invoke) } } override fun onDestroyView { super.onDestroyView _binding = null}}
这个`XDialog`啊,继承自`DialogFragment`。在 `onCreateDialog` 方法里咱们创建了一个 `Dialog` 对象。然后在 `onStart` 方法里呢,咱们先给窗口设置背景颜色为透明的,然后又把窗口的宽高设置为 `WRAP_CONTENT`。Zui后呢,咱们用 `dslBlock` 来调用 `DialogScope` 的方法来配置对话框。
使用示例showXDialog { setCanceledOnTouchOutside setDimAmount setWidth setGravity(Gravity.你kan呀!这种方式直接把整个对话框的逻辑封装起来了。以后再想显示一个对话框的时候,只需要传入你的 `ViewBinding` 对象和一个 `DialogScope` 对象就行了。简单又方便!你懂的?
一下总而言之,《这个Dialog是用ViewBinding封装的吗?》这个问题其实挺有意思的。通过封装一个 `DialogScope`, 你Ke以geng好地管理对话框的状态和属性。这不仅Neng提高代码的可读性和可维护性,还Neng让你的代码geng加健壮。
Ru果有帮助到你,请点赞收藏 Zui后附上源码地址
html
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback