Mar*_*ner 1 data-binding android
我为我的活动创建一个数据模型,如下所示:
data class ActivityModel (
var font: Int
)
Run Code Online (Sandbox Code Playgroud)
并在活动中将值设置为该字体,如下所示:
items.font = R.font.san_francisco
Run Code Online (Sandbox Code Playgroud)
最后,在 XML 布局中使用它,如下所示:
android:fontFamily="@{ResourcesCompat.getFont(context, items.font)}"
Run Code Online (Sandbox Code Playgroud)
我还将此变量导入到 XML 布局中:
<import type="androidx.core.content.ContextCompat"/>
<import type="androidx.core.content.res.ResourcesCompat"/>
Run Code Online (Sandbox Code Playgroud)
但通过这种方式,应用程序不会构建,并且java(生成的)目录中出现错误。
那么,如何将字体系列设置为编辑文本?
您可以使用绑定适配器来完成此操作,如下所示:
1-创建字体类型作为枚举类以包含所有字体:
enum class FontsTypes(@FontRes val fontRes: Int) {
CAIRO_REGULAR(R.font.font_cairo_regular),
CAIRO_BOLD(R.font.font_cairo_bold),
CAIRO_SEMI_BOLD(R.font.font_cairo_semi_bold)
}
Run Code Online (Sandbox Code Playgroud)
2-创建一个有趣的绑定适配器:
@BindingAdapter("font")
fun TextView.font( type: FontsTypes) {
try {
typeface = ResourcesCompat.getFont(context, type.fontRes)
} catch (e: Exception) {
e.printStackTrace()
}
}
Run Code Online (Sandbox Code Playgroud)
3-在 xml 中导入 FontsTypes :
<data>
<import type="<replace_with_path>.FontsTypes"/>
</data>
Run Code Online (Sandbox Code Playgroud)
4-从 xml 调用它:
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
font="@{model.selected ? FontsTypes.CAIRO_BOLD : FontsTypes.CAIRO_SEMI_BOLD }" />
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2205 次 |
| 最近记录: |