我想以编程方式设置按钮样式。原因是我的CustomView包含Button
。我使用<declare-styleable>
中的自定义参数将样式ID发送到我的CustomView。现在,我只需要为Button
而非我的CustomView中的整个视图设置按钮样式。
CustomView:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ProgressBar
android:id="@+id/progressBar"
android:layout_width="40dp"
android:layout_height="40dp"
android:indeterminate="true"
android:layout_gravity="center"
android:indeterminateTint="@color/colorText"/>
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</FrameLayout>
我的代码中的CustomView:
<myproject.CustomView
android:id="@+id/btn"
app:progressColor="@color/colorText"
app:l_buttonText="@string/text"
app:l_buttonStyle="@style/dialog_outlined"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="48dp" />
我要实现的是仅设置Button的样式(从app:l_buttonStyle
获得的值),但是我必须以编程方式进行此操作,因为如果我以XML设置样式,它将应用于FrameLayout
作为根视图。这是初始化CustomView部分的功能
private fun init(context: Context) {
//Init default values
View.inflate(context, R.layout.loading_button, this)
button = findViewById(R.id.button)
progressBar = findViewById(R.id.progressBar)
progressBar?.setGone()
//Now I need to set style for my inflated Button from XML layout
}
答案 0 :(得分:0)
必须以编程方式创建自定义视图中的视图,并且在初始化视图时必须应用自定义样式。视图初始化后,就无法设置样式。
val button = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Button(this, null, 0, R.style.BtnStyle)
} else {
var themeWrapper = ContextThemeWrapper(this, R.style.BtnStyle)
Button(themeWrapper, null, 0)
}