我正在尝试按照自定义布局的方式制作自定义ProgressBar
。这次我遇到了问题。
我只用这个xml就能达到理想的效果:
<ProgressBar
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:indeterminateOnly="false"
android:progressDrawable="@drawable/progress_bar" />
然而,最终目标是在自定义类中进行一些自定义,以便xml缩小到这个:
<se.my.viktklubb.app.progressbar.HorizontalProgressBar
android:id="@+id/planProgressBar"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
以下是自定义类:
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实现,但我只是用这个简单的案例来证明这个问题。
答案 0 :(得分:0)
根据此article的项目符号5,您可能需要修改initialSetup:
fun initialSetup() {
max = 100
isIndeterminate = false
progressDrawable = context.getDrawable(R.drawable.progress_bar)
invalidate()
requestLayout()
}
如果它没有改变任何东西,请尝试稍后调用initialSetup,例如onResume of activity / fragment。如果这项工作,问题可能与android组件的初始化/生命周期的复杂性有关。