Rav*_*avi 7 data-binding android android-databinding
我正在尝试android:textAppearance使用 of进行设置DataBinding,但它不允许我?android:attr/textAppearanceLarge与三元运算符一起使用。
android:textAppearance="@{position==1 ? ?android:attr/textAppearanceLarge : ?android:attr/textAppearanceMedium}"
Run Code Online (Sandbox Code Playgroud)
它向我展示了编译时错误<expr> expected, got '?'。
有没有其他方法可以将它与 DataBinding 一起使用?
您可以使用 android.R.attr 包而不是 ?android:attr
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<data>
<import type="android.R.attr"/>
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="hello world"
android:textAppearance='@{age==1 ? android.R.attr.textAppearanceLarge : android.R.attr.textAppearanceMedium}'
tools:textAppearance="?android:textAppearanceLarge"
/>
</LinearLayout>
</layout>
Run Code Online (Sandbox Code Playgroud)
你不能直接使用它,但是这是我在这种情况下使用的技巧。使用textAppearanceLarge和textAppearanceMedium作为父项创建自己的样式,然后改为设置这些样式:
首先创建Foo样式:
<style name="Foo" parent="TextAppearance.AppCompat.Large">
... [whatever you need to set or override ] ...
</style>
Run Code Online (Sandbox Code Playgroud)
并为 for 做同样的事情FooMedium。然后编辑您的布局文件,如下所示。请注意,您必须首先R在<data>块中导入项目的类:
<data>
<import type="<your-package-id>.R"
</data>
Run Code Online (Sandbox Code Playgroud)
最后应用您以前想要的外观:
android:textAppearance="@{ position==1 ? R.style.Foo : R.style.FooMedium }"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3569 次 |
| 最近记录: |