DataBinding (四) 自定义属性

2024-02-28 08:08

本文主要是介绍DataBinding (四) 自定义属性,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言
DataBinding 的时候,会调用 View 的,setXxx 方法。比如下面代码

<TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@{user.name}" />


绑定的时候,会调用 setText(String text) 方法。 
前提是 TextView 已经有了 setText(String text) 方法,没有 setText 方法,或者 setText 方法的方法签名不一样,都是不行的。 
所以,不是所有的属性都能通过 DataBinding 来设置。

当没有方法的时候,有两种做法
1. 如果有类似的方法,只是方法名或者方法签名不一样,可以通过设置来调用现有的方法。

比如 android:onClick,View 中没有 setOnClick 方法,但是有 setOnClickListener 方法,而且方法签名是一样的。 
这时候我们可以使用 BindingMethod 来做个中转。

@BindingMethods({@BindingMethod(type = View.class, attribute = "android:onClick", method = "setOnClickListener")
})


@BindingMethods 定义到类名上面。 
当然,如果你仅仅是想重命名 setter,也可以通过 @BindingMethods 来实现。

比如 android:paddingLeft,View 中是没有 setPaddingLeft 方法的,只有 setPadding 方法。 
这时候可以自定义一个 set 方法,并在方法上面添加 @BindingAdapter。

@BindingAdapter("android:paddingLeft")
public static void setPaddingLeft(View view, int padding) {view.setPadding(padding,view.getPaddingTop(),view.getPaddingRight(),view.getPaddingBottom());
}


2. 没有类似方法,添加对应的方法。 
比如 app:xxx 属性 
如果方法签名就是 app:xxx 属性里设定的值得话,直接定义 setXxx 方法即可。 
如果方法签名像上面的 setPaddingLeft 一样,还需要把 View 自己也传入的话,那么除了要定义 setXxx 方法,还需要添加 @BindingAdapter(“android:xxx”)

DataBinding Library 提供了一些自定义属性
幸运的是,有些常用的属性,比如上面提到的 android:onClick 和 android:paddingLeft,Library 已经帮你设置好了,自己不需要在设置就可以直接使用了。(具体可以参照android.databinding.adapters.ViewBindingAdapter)

多属性绑定
同一个方法,可以同时设置多个属性

@BindingAdapter({"bind:imageUrl", "bind:error"})
public static void loadImage(ImageView view, String url, Drawable error) {Picasso.with(view.getContext()).load(url).error(error).into(view);
}


Picasso 读取图片同时需要 imageUrl 和 error。同时定义的时候才调用,缺一不可。

上面的例子是同时设定的时候才调用,如果是定义了其中某一个的时候就调用的话,只需要加个 requireAll = false 就 OK 了。

@BindingAdapter(value = {"android:onViewDetachedFromWindow", "android:onViewAttachedToWindow"},requireAll = false)public static void setOnAttachStateChangeListener(View view,final OnViewDetachedFromWindow detach, final OnViewAttachedToWindow attach) {
}


setOnAttachStateChangeListener 在 android:onViewDetachedFromWindow 或者 android:onViewAttachedToWindow 其中之一调用的时候就调用。

这篇关于DataBinding (四) 自定义属性的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/754904

相关文章

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

滚雪球学Java(87):Java事务处理:JDBC的ACID属性与实战技巧!真有两下子!

咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE啦,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~ 🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!! 环境说明:Windows 10

自定义类型:结构体(续)

目录 一. 结构体的内存对齐 1.1 为什么存在内存对齐? 1.2 修改默认对齐数 二. 结构体传参 三. 结构体实现位段 一. 结构体的内存对齐 在前面的文章里我们已经讲过一部分的内存对齐的知识,并举出了两个例子,我们再举出两个例子继续说明: struct S3{double a;int b;char c;};int mian(){printf("%zd\n",s

Spring 源码解读:自定义实现Bean定义的注册与解析

引言 在Spring框架中,Bean的注册与解析是整个依赖注入流程的核心步骤。通过Bean定义,Spring容器知道如何创建、配置和管理每个Bean实例。本篇文章将通过实现一个简化版的Bean定义注册与解析机制,帮助你理解Spring框架背后的设计逻辑。我们还将对比Spring中的BeanDefinition和BeanDefinitionRegistry,以全面掌握Bean注册和解析的核心原理。

Oracle type (自定义类型的使用)

oracle - type   type定义: oracle中自定义数据类型 oracle中有基本的数据类型,如number,varchar2,date,numeric,float....但有时候我们需要特殊的格式, 如将name定义为(firstname,lastname)的形式,我们想把这个作为一个表的一列看待,这时候就要我们自己定义一个数据类型 格式 :create or repla

HTML5自定义属性对象Dataset

原文转自HTML5自定义属性对象Dataset简介 一、html5 自定义属性介绍 之前翻译的“你必须知道的28个HTML5特征、窍门和技术”一文中对于HTML5中自定义合法属性data-已经做过些介绍,就是在HTML5中我们可以使用data-前缀设置我们需要的自定义属性,来进行一些数据的存放,例如我们要在一个文字按钮上存放相对应的id: <a href="javascript:" d

一步一步将PlantUML类图导出为自定义格式的XMI文件

一步一步将PlantUML类图导出为自定义格式的XMI文件 说明: 首次发表日期:2024-09-08PlantUML官网: https://plantuml.com/zh/PlantUML命令行文档: https://plantuml.com/zh/command-line#6a26f548831e6a8cPlantUML XMI文档: https://plantuml.com/zh/xmi

Python中的属性装饰器:解锁更优雅的编程之道

引言 在Python的世界里,装饰器是一个强大的工具,它允许我们以一种非侵入性的方式修改函数或方法的行为。而当我们谈论“属性装饰器”时,则是在探讨如何使用装饰器来增强类中属性的功能。这不仅让我们的代码更加简洁、易读,同时也提供了强大的功能扩展能力。本文将带你深入了解属性装饰器的核心概念,并通过一系列实例展示其在不同场景下的应用,从基础到进阶,再到实际项目的实战经验分享,帮助你解锁Python编程

argodb自定义函数读取hdfs文件的注意点,避免FileSystem已关闭异常

一、问题描述 一位同学反馈,他写的argo存过中调用了一个自定义函数,函数会加载hdfs上的一个文件,但有些节点会报FileSystem closed异常,同时有时任务会成功,有时会失败。 二、问题分析 argodb的计算引擎是基于spark的定制化引擎,对于自定义函数的调用跟hive on spark的是一致的。udf要通过反射生成实例,然后迭代调用evaluate。通过代码分析,udf在

鸿蒙开发中实现自定义弹窗 (CustomDialog)

效果图 #思路 创建带有 @CustomDialog 修饰的组件 ,并且在组件内部定义controller: CustomDialogController 实例化CustomDialogController,加载组件,open()-> 打开对话框 , close() -> 关闭对话框 #定义弹窗 (CustomDialog)是什么? CustomDialog是自定义弹窗,可用于广告、中