记录.自定义ProgressBarDialog

 一个简单的自定义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()
    }

自用记录。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值