在kotlin中定制ProgressBar

我试图做一个自定义ProgressBar的方式,我做了很多以前的自定义布局。 这一次我有问题。

我可以用这个xml实现所需的外观:

  

然而,最终的目标是在自定义类中进行一些自定义,所以xml缩小到这个范围:

  

这是自定义类:

 class HorizontalProgressBar : ProgressBar { constructor(context: Context) : super(context) { initialSetup() } constructor(context: Context, attrs: AttributeSet) : super(context, attrs) { initialSetup() } constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int) : super(context, attrs, defStyleAttr) { initialSetup() } fun initialSetup() { max = 100 isIndeterminate = false progressDrawable = context.getDrawable(R.drawable.progress_bar) } } 

第二个构造函数被解雇了,但是这个酒吧没有风格。 它实际上表现为不确定的旋转进度,并且这些设置最终都不会被应用 – 感觉就像之后被别的东西覆盖一样。

这里有什么问题?

免责声明:这是一个非常简单的例子。 我完全知道我可以去风格或简单的XML实现,但我只是用这个简单的例子来certificate这个问题。

根据本文的第 5项,您可能需要修改initialSetup:

 fun initialSetup() { max = 100 isIndeterminate = false progressDrawable = context.getDrawable(R.drawable.progress_bar) invalidate() requestLayout() } 

如果它没有改变任何东西,请稍后尝试调用initialSetup,例如onResume of activity / fragment。 如果这个工作,这个问题可能与android组件初始化/生命周期的复杂性有关。