Можно ли изменить стиль виджета индикатора выполнения непосредственно из кода 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)
}
}