我想通过数据绑定实现自定义视图或组件。
自定义组件info_card_view.xml
具有以下布局:
<android.support.design.card.MaterialCardView
style="@style/Widget.MaterialComponents.CardView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="100dp">
<TextView
android:id="@+id/header"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</android.support.design.card.MaterialCardView>
以及组件InfoMaterialCardView.kt
的kotlin类:
class InfoMaterialCardView@JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : MaterialCardView(context, attrs, defStyleAttr) {
var binding: InfoCardViewBinding = DataBindingUtil.inflate(LayoutInflater.from(context), R.layout.info_card_view, this, true)
lateinit var header: String
init {
context.theme.obtainStyledAttributes(
attrs,
R.styleable.InfoMaterialCardView,
0, 0).apply {
try {
header = getString(R.styleable.InfoMaterialCardView_header) ?: ""
binding.header.text = header
} finally {
recycle()
}
}
}
}
在此处创建自定义属性的文件:
<resources>
<declare-styleable name="InfoMaterialCardView">
<attr name="header" format="string" />
</declare-styleable>
</resources>
使用以下代码,我可以按如下方式使用该组件:
<com.pitagorinesgroup.streamrights.utils.views.InfoMaterialCardView
android:id="@+id/infoMaterialCardView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
custom:header="initial"/>
那很好,并且标题的值设置为initial
,但我想实现类似的目的:
<com.pitagorinesgroup.streamrights.utils.views.InfoMaterialCardView
android:id="@+id/infoMaterialCardView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
custom:header="@={value}"/>
使用@={value}
可变的实时数据,可以随时更改并通过服务器调用进行更新。
谢谢!