一个简单的自定义ProgressBar弹框,简单自用,记录一下。
下面开始:
CustomDialog.style
<style name="CustomDialog" 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>
<!--悬浮在activity之上-->
<item name="android:windowIsFloating">true</item>
<!--是否模糊-->
<item name="android:backgroundDimEnabled">true</item>
<item name="android:background">@null</item>
<item name="android:backgroundDimAmount">0.6</item>
</style>
progressBarHorizontal.style
<style name="progressBarHorizontal" parent="android:Widget.ProgressBar.Horizontal">
<item name="android:indeterminateOnly">false</item>
<item name="android:progressDrawable">@drawable/progress_style</item>
<item name="android:minHeight">15dp</item>
<item name="android:maxHeight">15dp</item>
</style>
progress_style.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background">
<shape>
<solid android:color="#FFFFFF" />
<corners android:radius="25dp" />
</shape>
</item>
<item android:id="@android:id/progress">
<clip>
<shape>
<solid android:color="#FF018786" />
<corners android:radius="25dp" />
</shape>
</clip>
</item>
</layer-list>
ProgressDialog.kt
class ProgressDialog : Dialog {
constructor(context: Context) : super(context, R.style.CustomDialog)
private var progressBar: ProgressBar? = null
private var progressTextView: TextView? = null
fun setProgress(progress: Int, progressText: String) {
progressBar?.progress = progress
progressTextView?.text = progressText
}
class Builder(context: Context) {
private var title: String? = null
private var msg: String? = null
private val layout: View
private val dialog: ProgressDialog = ProgressDialog(context)
init {
val inflate =
context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
layout = inflate.inflate(R.layout.dialog_progress, null)
dialog.addContentView(
layout,
ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT
)
)
}
fun setTitle(title: String?): Builder {
this.title = title
return this
}
fun setMessage(msg: String?): Builder {
this.msg = msg
return this
}
fun createProgressDialog(): ProgressDialog {
dialog.progressBar = layout.findViewById(R.id.progressBar)
dialog.progressTextView = layout.findViewById(R.id.progress_text)
create()
return dialog
}
private fun create() {
if (msg != null) {
layout.findViewById<TextView>(R.id.tv_message).visibility = View.VISIBLE
layout.findViewById<TextView>(R.id.tv_message).text = msg
}
if (title != null) {
layout.findViewById<TextView>(R.id.tv_title).visibility = View.VISIBLE
layout.findViewById<TextView>(R.id.tv_title).text = title
}
dialog.setContentView(layout)
dialog.setCancelable(false)
dialog.setCanceledOnTouchOutside(false)
}
}
}
dialog_progress.xml
<?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/round_coner_background"
android:gravity="center_horizontal"
android:minWidth="400dp"
android:minHeight="200dp"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:minWidth="400dp"
android:minHeight="200dp"
android:orientation="vertical">
<TextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="下载提示"
android:textColor="@color/WHITE"
android:textSize="22sp"
android:textStyle="bold" />
<TextView
android:id="@+id/tv_message"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="15dp"
android:layout_marginTop="20dp"
android:padding="5dp"
android:text="当前下载进度:"
android:textColor="@color/WHITE"
android:textSize="14sp" />
<ProgressBar
android:id="@+id/progressBar"
style="@style/progressBarHorizontal"
android:layout_width="match_parent"
android:layout_height="15dp"
android:layout_marginStart="20dp"
android:layout_marginTop="10dp"
android:layout_marginEnd="20dp"
android:max="100"
android:progress="10" />
<TextView
android:id="@+id/progress_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:layout_marginEnd="20dp"
android:gravity="right"
android:padding="2dp"
android:text="0MB/108MB"
android:textColor="@color/WHITE" />
</LinearLayout>
</LinearLayout>
用法:
private fun showProgressDialog() {
mProgressDialog = ProgressDialog.Builder(this)
.setTitle("下载提示")
.setMessage("当前下载进度")
.createProgressDialog()
val dialogWindow = mProgressDialog!!.window
val lp = dialogWindow!!.attributes
lp?.width = WindowManager.LayoutParams.WRAP_CONTENT
lp?.height = WindowManager.LayoutParams.WRAP_CONTENT
dialogWindow.attributes = lp
mProgressDialog!!.window!!.setFlags(
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
)
mProgressDialog!!.show()
}
自用记录。