后台的接口返回时间如果比较长,这个时候如果不加任何的提示,会导致用户因为没有看到是否执行而导致重复的操作,为了增加用户的体验感,则需要增加一个等待提示,一般都是展示一个不断旋转的小圆圈
AlertDialog(官方文档)用于提示用户和进行简单交互,可以提供最多三个按钮,标题(title)和提示信息(message)可以通过方法直接设置,如果需要呈现复杂布局,也可以自定义布局并设置
自定义AlertDialog布局实现页面等待提示
这里我使用的是自定义布局来实现不断旋转的小圆圈效果,以下是 xml 布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center">
<ProgressBar
style="@android:style/Widget.ProgressBar.Inverse"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
在res/values/colors.xml
文件中增加将要用到的背景色:
<color name="color_transparent">#00000000</color>
小圆圈页面等待提示具体实现代码如下,其中ActivityManager.getCurrentActivity()
(相关代码) 是获取了当前正在显示的 Activity,使得不需要在方法中传递 Context 参数也能创建 AlertDialog
object DialogManager {
fun showRound(): AlertDialog? = ActivityManager.getCurrentActivity()?.let {
AlertDialog.Builder(it).create().apply {
window?.run {
// 设置背景透明,去四个角
setLayout(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT
)
// 设置固定宽带,高度自适应
setBackgroundDrawableResource(R.color.color_transparent)
}
// 设置点击dialog的外部能否取消弹窗
setCanceledOnTouchOutside(false)
// 设置能不能返回键取消弹窗
setCancelable(false)
show()
setContentView(
View.inflate(it, R.layout.alert_dialog_round, null).apply {
// 设置成顶层视图
bringToFront()
}
)
}
}
}
页面等待提示就完成了,以下是具体使用方式:
val showRound = DialogManager.showRound()
try {
// 相关操作
} catch (e: Exception) {
e.printStackTrace()
} finally {
if (showRound!!.isShowing) {
showRound.cancel()
}
}
效果展示
网友评论