Как программно изменить стиль виджета индикатора выполнения - PullRequest
0 голосов
/ 06 февраля 2020

Можно ли изменить стиль виджета индикатора выполнения непосредственно из кода java / kt и , а не из xml. Я могу использовать два индикатора выполнения (по одному для каждого стиля - горизонтальный и круглый). Но я чувствую, что это будет слишком много шаблонов, чтобы скрывать / показывать каждый раз правильный индикатор выполнения. Моя цель - создать что-то похожее на диалог прогресса, но с возможностью отображать процент загруженного файла, который загружает пользователь.

Это мой код:

class LoadingDialog : DialogFragment()
{

    private var  dialogMessageTxt : TextView? = null
    private var progressBar : ProgressBar? = null

    var messageTxt : String? = null
    set(value) {
        dialogMessageTxt?.text = value
        field = value
    }

    var isIndetrerminate = true
    set(value){
        progressBar?.isIndeterminate = value
        field = value
    }


    var prog : Int = 0
    set(value){
        progressBar?.progress = prog
        field = value
    }

    var progStyle : Int = android.R.style.Widget_ProgressBar
    set(value){
        progressBar?.explicitStyle = value  **I have a problem here not sure how to set the new style to the progressbar**
        field = value
    }
    var progressStyle : Int = android.R.style.Widget_ProgressBar

    companion object{
        const val TAG = "LoadingDialog"

        const val DIALOG_MESSAGE_KEY = "DIALOG_MESSAGE_KEY"

        fun newInstance() : LoadingDialog{
            return LoadingDialog()
        }

    }

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        val v = inflater.inflate(R.layout.progress_bar_layout,container,false)

        retainInstance = true
        isCancelable = false

        initViews(v)
        dialog?.requestWindowFeature(Window.FEATURE_NO_TITLE)

        return v
    }

    override fun onStart() {
        super.onStart()

        val displayRectangle = Rect()
        val window = activity?.window
        window?.decorView?.getWindowVisibleDisplayFrame(displayRectangle)


       dialog?.window!!.setLayout((resources.getString(R.string.widthRatio).toFloat()*displayRectangle.width()).toInt(), WindowManager.LayoutParams.WRAP_CONTENT)

    }

    private fun initViews(v : View){
        dialogMessageTxt = v.findViewById(R.id.loading_msg)
        progressBar = v.findViewById(R.id.loader)

        messageTxt?.run {
            dialogMessageTxt?.text = messageTxt
        }

        progressBar?.isIndeterminate = isIndetrerminate

    }


    override fun onSaveInstanceState(outState: Bundle) {
        super.onSaveInstanceState(outState)
        outState.putString(DIALOG_MESSAGE_KEY,messageTxt)
    }
}
...