一些databinding 赋值小技巧

本文深入探讨DataBinding的高级应用,包括动态颜色设置、字符串拼接、条件表达式、事件绑定及属性默认值设定,旨在提升XML布局的灵活性与响应性。

①dataBinding在xml文件是支持import,可以导入java支持的包,所以也就可以进行简单的运算,比如上面的xml中就用了三元运算符
动态设置颜色

android:textColor="@{user.vip? 0xffff0000:0xff000000}"

当导入的用户是vip的时候,文本颜色会设置为红色,当不是vip的时候会显示黑色

②而且支持java的字符串拼接

android:text="@{user.nickName + `(` + user.name +`)`}"

细心的网友肯定会发现,这个字符串拼接的时候用到的里面不是单引号‘,而是一个数字键1左边那个键`。

其中在dataBinding的xml文件中,是不支持双引号中加单引号的,但是支持单引号中加双引号,在双引号中可以加`;

也可以把字符写到String 文件中,赋值这样写

android:text="@{user.nickName + `@string/aa`}"
注意是@string 

③细心的网友还会发现xml中有这样一句话

android:text="@{user.nickName ?? user.name}"

这里用了双冒号??代表的意思是,如果user.nickName为空,则显示user.name,如果不为空,则显示nickName;

其中这句话等于  user.nickName == null ? user.name : user.nickName;

④既然这是xml布局,大家肯定知道在xml中是不允许用<>的,用的话会被默认是标签,那么如果一定要用<>做比较表达式呢,这里可以使用转义来解决。

代码中有这样一句话:

android:textColor="@{user.level &lt; 3 ? 0xff03bbf9 : 0xfff60bdb }
其中的< 代表的就是小于符号<,意思是如果用于等级小于3,则邮箱文本为蓝色,否则文本为紫色。

⑤而我们实际运用中肯定也会有很多的点击事件,那么如何实现点击事件的呢?

这就是我们为什么在dataBean实体类User中添加了两个方法的原因

public void clickName(View view){
        Toast.makeText(view.getContext(),"点击了用户名",Toast.LENGTH_SHORT).show();
    }

这两个方法其实不一定写在实体类中,其实写在其他类中也是可以的,不过我更推荐写在实体类中,因为触发事件的时候,很有可能会用到实体类的其他属性,写在这里面调用起来就变得比较轻松了。

然后再把事件和xml中绑定在一起

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="25sp"
android:onClick="@{user.clickName}"
android:textColor="@{user.vip? 0xffff0000:0xff000000}"
android:text="@{user.nickName + `(` + user.name +`)`}"/>

这个中间有onClick和onLongClick用于绑定。

设置View上属性默认值

<TextView android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:text="@{user.firstName, default=test}"/>

语法就是在完整的属性值最后用英文的逗号隔开, 加上default=xxxx, 注意这个默认值是不能加上引号的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值