Android databinding(详解三)--自定义属性使用

来源:互联网 发布:淘宝top10销量排行榜 编辑:程序博客网 时间:2024/06/03 09:26

        在上面的几篇文章(Android databinding中Activity详解)从一个例子中解析了,Android databinding的使用,本篇文章是databinding中的自定义属性的使用。
        databinding的自定义属性就相当于android中在resource中使用attrs一样,但是使用起来比Android自定义的属性使用的更加方便,下面直接上一些比较常用的自定义的属性。

@BindingAdapter({"image_url"})    public static void loadImage(ImageView view, String url){        if(!StringUtils.isEmpty(url)) {            Glide.with(view.getContext()).load(url).into(view);  //设置全缓存.diskCacheStrategy(DiskCacheStrategy.ALL)        }    }    @BindingAdapter({"image_url"})    public static void loadImage(ImageView view, int resoureId){        view.setImageResource(resoureId);    }    @BindingAdapter({"image_url"})    public static void loadImage(DraweeView view, String url){        view.setController(Fresco.newDraweeControllerBuilder().setUri(url).build());    }    @BindingAdapter({"weight"})    public static void setWeight(View view, int weight){        if(weight < 0 ){            weight = 0 ;        }        view.setLayoutParams(new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.MATCH_PARENT,                weight));    }    @BindingAdapter({"imageWidth"})    public static void setImageWidth(ImageView view, float size){        ViewGroup.LayoutParams params = view.getLayoutParams();        params.width = UIUtils.dp2Px(size);        view.setLayoutParams(params);    }    @BindingAdapter({"imageHeight"})    public static void setImageHeight(ImageView view, float size){        ViewGroup.LayoutParams params = view.getLayoutParams();        params.height = UIUtils.dp2Px(size);        view.setLayoutParams(params);    }    @BindingAdapter({"RLMargins"})    public static void setRLMargins(View view, MarginInfo marginInfo){        if (marginInfo == null){            return;        }        RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams( ViewGroup.LayoutParams                .WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);        layoutParams.setMargins(marginInfo.getLeft(),marginInfo.getTop(),marginInfo.getRight(),                marginInfo.getBottom());        view.setLayoutParams(layoutParams);    }    @BindingAdapter({"LLMargins"})    public static void setLLMargins(View view, MarginInfo marginInfo){        if (marginInfo == null){            return;        }        LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams( ViewGroup.LayoutParams                .WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);        layoutParams.setMargins(marginInfo.getLeft(),marginInfo.getTop(),marginInfo.getRight(),                marginInfo.getBottom());        view.setLayoutParams(layoutParams);    }

        以上是我在项目所使用的一些通用的自定义属性,在databinding中的自定义属性就是BindAdapter这个注解方法,下面详细解析BindAdapter的使用:
        @BindAdapter这个相当于注解这个方法是一个自定的属性;{}内部表示使用时这个属性的名字,比如说@BindAdapter(“{image_url}”),在xml中可以这样子使用app:image_url=”url”,注意这些自定属性是在http://schemas.android.com/apk/res-auto这个命名空间下的(也就是data binding的空间下),记得声明;声明自定义属性的方法名是不限制的,遵从Java方法的规范,可以重载等,data binding会针对对应使用的地方,找到相匹配的方法进行设置;方法的参数,第一个必须是View的子类,第二个也就是需要传进来的数据,可以是任意的数据类型,在xml中也可以用databinding的实体传递进来。

xml中的代码:
<layout xmlns:app="http://schemas.android.com/apk/res-auto">    <data>        <variable            name="click"            type="android.view.View.OnClickListener" />       <variable name="url" type="String"/>              <android.support.design.widget.CoordinatorLayout    xmlns:android="http://schemas.android.com/apk/res/android"        xmlns:tools="http://schemas.android.com/tools"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:background="@color/common_white">       <ImageView               android:id="@+id/act_record_image"               android:onClick="@{click::onClick}"               android:layout_gravity="center"               android:layout_width="wrap_content"               android:layout_height="wrap_content"               app:image_url="@{url}"/>     </android.support.design.widget.CoordinatorLayout></layout>

        这样子看起来是不是很简单呢,不必再在resource中定义一大堆的属性,而且属性的类型也不限制于基本的一些类型,相信有一些人通过这个可以感觉通过这个的话,我们自定义view的时候是不是很简单呢?对的,很简单的,只需定义一个layout,声明实体或者就自定义一些字段,layout中使用databinding设置界面,在BindAdapter中设置对应的属性至View的属性中,大概就是如此,有兴趣的小伙伴可以自己试着谢谢,之后再简单介绍一个自定义View来进行解释。
        下一篇文章-databinding layout中特殊使用。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 当遇到殴打时怎么办 五官小但是脸大怎么办 脸太小搭五官也不好看怎么办 后颈头发出汗多怎么办 中分短发遮眼睛怎么办 电脑重启不了怎么办 电脑系统文件损坏怎么办 qt程序异常结束怎么办 电脑应用程序发生异常怎么办 ie代理配置错误怎么办 comsol残差太大怎么办 创建ud分区失败怎么办 肺活量vc异常该怎么办 pr音频mme错误怎么办 vs的mysql打不开怎么办 电脑表格文档打不开怎么办 cdr文件没保存怎么办 cdr突然未响应怎么办 qq发文件过大怎么办 wps打不开文件了怎么办 cad显示未响应怎么办 桌面快捷方式删了怎么办 exe文件怎么打不开怎么办 表格打不开了怎么办啊 win10装xp蓝屏怎么办 c盘无法格式化怎么办 吃鸡一直加载怎么办 终结者2读条慢怎么办 excel运行很慢怎么办 手机右键没反应怎么办 电脑一直在加载怎么办 win10开机卡logo怎么办 电脑右下角图标打不开怎么办 钥匙打不开锁怎么办 门关了打不开怎么办 门关住了打不开怎么办 系统打不开exe文件怎么办 笔记本电脑打不开exe文件怎么办 80注册itms失败怎么办 手机游戏两边有黑边怎么办 飞车改装错了怎么办