如何使Anko中的indeterminateProgressDialog不可取消?
解决Anko中indeterminateProgressDialog不可取消的问题
嘿,这个问题我之前也踩过坑!Anko的indeterminateProgressDialog确实没有像alert那样直接暴露isCancelable属性,但别担心——它底层其实是基于Android原生的ProgressDialog实现的,我们直接操作原生对象就能搞定。
具体实现方法
当你调用indeterminateProgressDialog()时,它会直接返回一个Android原生的ProgressDialog实例,所以我们可以直接调用原生的setCancelable()方法来禁止取消:
// 创建进度对话框并设置不可取消 val loadingDialog = indeterminateProgressDialog(message = "正在加载,请稍候...") loadingDialog.setCancelable(false) // 可选:如果不想让用户点击对话框外部区域取消,再加上这行 loadingDialog.setCanceledOnTouchOutside(false)
也可以用Kotlin的apply函数写得更简洁:
indeterminateProgressDialog("正在加载,请稍候...").apply { setCancelable(false) setCanceledOnTouchOutside(false) }
补充说明
setCancelable(false)会同时禁止Back键和外部点击两种取消方式;- 如果只想要禁止外部点击、但保留Back键取消的功能,只需要调用
setCanceledOnTouchOutside(false)即可; - Anko的这类UI扩展函数大多都是对原生Android控件的封装,遇到类似属性缺失的问题,都可以先看看它返回的对象是不是原生控件,直接调用原生方法就能解决。
内容的提问来源于stack exchange,提问作者Albert Gao
相关产品推荐
相关产品推荐

