Sai*_*han 12 android android-databinding
非常基本,我想根据是否读取文本,使消息标题变为粗体.我似乎找不到解决方案.
这是我的XML代码:
<TextView
android:text="@{message.title}"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_marginBottom="5dp"
android:layout_marginTop="5dp"
android:layout_toLeftOf="@+id/timestamp"
android:textSize="18sp"
android:textStyle='@{message.isRead() ? "bold" : "normal"}'
android:textColor='@{message.isRead() ? 0xff313131 : 0xff0662ab}' />
Run Code Online (Sandbox Code Playgroud)
颜色变化很好,只有粗体文字给我一些问题.
错误:任务':app:compileDebugJavaWithJavac'的执行失败.
java.lang.RuntimeException:发现数据绑定错误.****/数据绑定错误****msg:在android.widget.TextView上找不到参数类型为java.lang.String的属性'android:textStyle'的setter.file:D:...... xml loc:39:41 - 39:79****\data binding error****
tom*_*ozb 19
一种简单的方法
public class TextViewBindingAdapter {
@BindingAdapter("isBold")
public static void setBold(TextView view, boolean isBold) {
if (isBold) {
view.setTypeface(null, Typeface.BOLD);
} else {
view.setTypeface(null, Typeface.NORMAL);
}
}
}
Run Code Online (Sandbox Code Playgroud)
XML:
<TextView
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:isBold="@{item.bold}"/>
Run Code Online (Sandbox Code Playgroud)
Håk*_*hia 17
您无需创建适配器即可执行此操作。
将字体导入到您的 XML
<data>
<import type="android.graphics.Typeface" />
...
</data>
Run Code Online (Sandbox Code Playgroud)
将该属性android:typeface与Typeface.defaultFromStyle结合使用:
android:typeface="@{Typeface.defaultFromStyle(message.isRead() ? Typeface.BOLD : Typeface.NORMAL)}"
Run Code Online (Sandbox Code Playgroud)
Sai*_*han 14
我最终使用以下代码,它实现了DataBinding.
public abstract class BindingAdapter {
@android.databinding.BindingAdapter("android:typeface")
public static void setTypeface(TextView v, String style) {
switch (style) {
case "bold":
v.setTypeface(null, Typeface.BOLD);
break;
default:
v.setTypeface(null, Typeface.NORMAL);
break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
和XML
<TextView
android:text="@{bericht.titel}"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_marginBottom="5dp"
android:layout_marginTop="5dp"
android:layout_toLeftOf="@+id/timestamp"
android:textSize="18sp"
android:textColor='@{bericht.isGelezen() ? 0xff313131 : 0xff0662ab}'
android:typeface='@{bericht.isGelezen() ? "normal" : "bold"}' />
Run Code Online (Sandbox Code Playgroud)