在上面的几篇文章(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中特殊使用。

更多相关文章

  1. Android(安卓)ListView几个比较特别的属性
  2. Android(安卓)_优雅实现元素间的分割线 (支持3.0以下)
  3. 【Android(安卓)界面效果34】Android里Service的bindService()和
  4. android电话流程(打电话,接电话,挂断电话)
  5. Android(安卓)Studio使用Volley
  6. Android(安卓)Handler机制之Handler 、MessageQueue 、Looper
  7. Android(安卓)ContentProvider总结
  8. Android(安卓)控件框架
  9. Android经典完美退出方法

随机推荐

  1. Android(安卓)加密解密 DES BASE64 MD5 U
  2. Android(安卓)Export aborted because fa
  3. Android(安卓)开源项目分类汇总
  4. android判断用户是否已登陆详细代码
  5. update android api
  6. metasploit - exploits
  7. Android、IOS 获取剪切板内容
  8. Android自动更新代码
  9. Android中的注解
  10. Android根据不同语言切换图片