【问题标题】:Android Databinding, set xml style from a function callAndroid 数据绑定,从函数调用中设置 xml 样式
【发布时间】:2021-12-10 00:31:36
【问题描述】:

应用说明

我在一个显示书籍列表的简单 Android 应用程序中使用数据绑定。
我使用RecyclerView 列出它们。 我准备了一个Book 对象,它有一个标题和一个颜色。

data class Book(val title: String, val color: BookColor)

BookColor 是一个枚举,包含 10 种不同的颜色。
现在,我为所有 10 种颜色创建了 10 种不同的样式(为 BookView 自定义视图量身定制)(以便它们与深色模式兼容)。

问题

我不知道如何使用数据绑定将书籍样式应用于实际的BookView

我想使用(来自数据绑定)我可以在帮助类中定义的函数,例如:

fun mapColorToStyle(color: Book)

接受一个Book 对象,它将book.color 映射到其匹配的XML 样式。

然后样式将返回到视图(RecyclerView 项)。

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">

<data>
    <variable
        name="book"
        type="com.x.y.model.Book" />
</data>


<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <BookView
        android:id="@+id/squircle"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:layout_gravity="center"
        android:padding="26dp"
        style="@{???}"
    />

    <TextView ... />
</LinearLayout>

有没有办法在不以编程方式设置样式的情况下实现这一点(我怀疑这是一个不错的解决方案)?

【问题讨论】:

    标签: android xml kotlin data-binding


    【解决方案1】:

    您可以使用绑定适配器而不是应用上述样式。

    @BindingAdapter("bindBookViewStyle")
    fun TextView.bindViewStyle(bookColor: BookColor) {
        val style =  mapColorToStyle(bookColor)
        TextViewCompat.setTextAppearance(this, style)
    }    
    

    然后修改你的项目xml

    <layout xmlns:app="http://schemas.android.com/apk/res-auto">
    
    <data>
    
        <variable
            name="book"
            type="com.xx.xx.Book" />
    </data>
    
    <BookView app:bindBookViewStyle="@{book.color}" />
    

    Please check similar answers

    【讨论】:

    • 我试试,但是 BookView 不是 TextView
    • @Andrea 是的,这不是问题,样本仅供参考。您可以在 Binding 适配器中调用适当的调用。
    • 非常感谢您提供的所有见解。如果 BookView 是 AppCompatImageView,您还碰巧知道什么是适当的样式设置调用?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-17
    • 2017-07-05
    • 1970-01-01
    • 2017-02-13
    • 1970-01-01
    相关资源
    最近更新 更多