对话框中使用loading
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对话框中使用loading相关的知识,希望对你有一定的参考价值。
参考技术A before-close:关闭前的回调,会暂停 Dialog 的关闭 function(done),done 用于关闭 Dialog一定要在对话框关闭前,把loading变为true,清空列表数据。否则loading只会出现一次,并且对话框会出现上一次的数据
Kotlin实现Android项目中通用loading对话框
在安卓项目中,都会有耗时操作,用户进行操作后,都会给一个诸如正在加载的提示框,例如:
实现代码如下:
- 第一步:编写通用加载框的布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/loading_dialog_bg"
android:gravity="center_horizontal"
android:orientation="vertical"
android:padding="40dp">
//有的APP是在这里直接使用ProgressBar
<ImageView
android:id="@+id/loadingIv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="@drawable/loading_dialog_anim" />
</LinearLayout>
- 第二步:编写对话框的样式:位于项目main/res/values/styles.xml文件中
<style name="commonDialogStyle" parent="@android:style/Theme.Dialog">
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowFrame">@null</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
<item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
</style>
- 第三步:实现自定义的Dialog
class CommonLoadingDialog private constructor(context: Context, theme: Int) : Dialog(context, theme)
companion object
private lateinit var mDialog: CommonLoadingDialog
private lateinit var animDrawable: AnimationDrawable
fun buildDialog(context: Context): CommonLoadingDialog
//根据指定主题样式创建Dialog
mDialog = CommonLoadingDialog(context, R.style.commonDialogStyle)
//设置Dialog的布局
mDialog.setContentView(R.layout.common_loading)
//点击或按返回键时消失
mDialog.setCancelable(true)
//点击对话框外的部分不消失.
mDialog.setCanceledOnTouchOutside(false)
//设置对话框居中
mDialog.window.attributes.gravity = Gravity.CENTER
val lp = mDialog.window.attributes
lp.dimAmount = 0.2f
//设置属性
mDialog.window.attributes = lp
//获取对话框中的动画
val animView = mDialog.findViewById<ImageView>(R.id.loadingIv)
animDrawable = animView.background as AnimationDrawable
return mDialog
//显示加载框
fun showLoading()
super.show()
animDrawable?.start()
//关闭加载框
fun hideLoading()
super.dismiss()
animDrawable?.stop()
- 最后:在需要的地方使用:
import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity()
override fun onCreate(savedInstanceState: Bundle?)
super.onCreate(savedInstanceState)
//布局中就是一个简单的TextView作为点击源
setContentView(R.layout.activity_main)
//项目中都是把CommonLoadingDialog放在基类中初始化,在需要的地方直接使用
val dialog: CommonLoadingDialog = CommonLoadingDialog.buildDialog(this);
dialogTv.setOnClickListener
dialog.showLoading()
- loading的圆角背景框drawable:
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<solid android:color="#7f000000" />
<corners
android:bottomLeftRadius="5dp"
android:bottomRightRadius="5dp"
android:topLeftRadius="5dp"
android:topRightRadius="5dp" />
</shape>
还有loading时转动的动画效果(最简单的帧动画)
//这里面的图片都是在网上找的
<?xml version="1.0" encoding="utf-8"?>
<animation-list
xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false">
<item android:drawable="@drawable/common_loading1" android:duration="200"/>
<item android:drawable="@drawable/common_loading2" android:duration="200"/>
<item android:drawable="@drawable/common_loading3" android:duration="200"/>
<item android:drawable="@drawable/common_loading4" android:duration="200"/>
<item android:drawable="@drawable/common_loading5" android:duration="200"/>
<item android:drawable="@drawable/common_loading6" android:duration="200"/>
<item android:drawable="@drawable/common_loading7" android:duration="200"/>
<item android:drawable="@drawable/common_loading8" android:duration="200"/>
<item android:drawable="@drawable/common_loading9" android:duration="200"/>
<item android:drawable="@drawable/common_loading10" android:duration="200"/>
</animation-list>
以上是关于对话框中使用loading的主要内容,如果未能解决你的问题,请参考以下文章
java 进度对话框。字体:https://stackoverflow.com/questions/12841803/best-way-to-show-a-loading-progress-indic