1. 程式人生 > >android -------- Data Binding的使用 ( 六) 自定義屬性

android -------- Data Binding的使用 ( 六) 自定義屬性

fan from adapt rim wrap width void 我只 ram

今天來說說DataBinding在自定義屬性的使用

默認的android命名空間下,我們會發現並不是所有的屬性都能直接通過data binding進行設置,比如margin,padding,還有自定義View的各種屬性。

默認資源使用

<?xml version="1.0" encoding="utf-8"?>

<layout xmlns:android="http://schemas.android.com/apk/res/android">

    <data>

        <!--通過自定義的data來賦值,data的類型定位string-->
<variable name="data" type="String" /> </data> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <Button android:id="@+id/btn_demo8_add"
android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="@{data}" /> </LinearLayout> </layout>

添加值:

 demo8Binding.setData("自定義屬性-添加");

屬性:

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

圖片自定義屬性:

/**
     * 1.加載圖片,無需手動調用此方法
     * 2.使用@BindingAdapter註解設置自定義屬性的名稱,imageUrl就是屬性的名稱,
     * 當ImageView中使用imageUrl屬性時,會自動調用loadImage方法,
     *
     * @param imageView ImageView
     * @param url       圖片地址
     */
    @BindingAdapter({"imageUrl"})
    public static void loadImage(ImageView imageView, String url) {
        Glide.with(imageView.getContext()).load(url)
                .placeholder(R.mipmap.ic_launcher)
                .error(R.mipmap.ic_launcher)
                .into(imageView);
    }

添加屬性和數據:

  <!-- 當imageUrl屬性存在時,會自動調用ImageHelper的loadImage方法 -->
        <ImageView
            android:layout_width="120dp"
            android:layout_height="120dp"
            android:scaleType="centerCrop"
            app:imageUrl="@{userImg.picUrl}"
            android:paddingLeft="@{15}"
            />

我只是簡單的舉幾個例子,還可以定義其他的屬性。

參考文檔:http://blog.zhaiyifan.cn/2016/07/06/android-new-project-from-0-p8/

android -------- Data Binding的使用 ( 六) 自定義屬性