ViewBindingAdapter.java revision c619d8f69127c1200103d8119101c5f0675661d0
1/*
2 * Copyright (C) 2015 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16package android.databinding.adapters;
17
18import android.databinding.BindingAdapter;
19import android.databinding.BindingMethod;
20import android.databinding.BindingMethods;
21import android.os.Build;
22import android.view.View;
23
24@BindingMethods({
25        @BindingMethod(type = android.view.View.class, attribute = "android:backgroundTint", method = "setBackgroundTintList"),
26        @BindingMethod(type = android.view.View.class, attribute = "android:fadeScrollbars", method = "setScrollbarFadingEnabled"),
27        @BindingMethod(type = android.view.View.class, attribute = "android:nextFocusForward", method = "setNextFocusForwardId"),
28        @BindingMethod(type = android.view.View.class, attribute = "android:nextFocusLeft", method = "setNextFocusLeftId"),
29        @BindingMethod(type = android.view.View.class, attribute = "android:nextFocusRight", method = "setNextFocusRightId"),
30        @BindingMethod(type = android.view.View.class, attribute = "android:nextFocusUp", method = "setNextFocusUpId"),
31        @BindingMethod(type = android.view.View.class, attribute = "android:nextFocusDown", method = "setNextFocusDownId"),
32        @BindingMethod(type = android.view.View.class, attribute = "android:requiresFadingEdge", method = "setVerticalFadingEdgeEnabled"),
33        @BindingMethod(type = android.view.View.class, attribute = "android:scrollbarDefaultDelayBeforeFade", method = "setScrollBarDefaultDelayBeforeFade"),
34        @BindingMethod(type = android.view.View.class, attribute = "android:scrollbarFadeDuration", method = "setScrollBarFadeDuration"),
35        @BindingMethod(type = android.view.View.class, attribute = "android:scrollbarSize", method = "setScrollBarSize"),
36        @BindingMethod(type = android.view.View.class, attribute = "android:scrollbarStyle", method = "setScrollBarStyle"),
37        @BindingMethod(type = android.view.View.class, attribute = "android:transformPivotX", method = "setPivotX"),
38        @BindingMethod(type = android.view.View.class, attribute = "android:transformPivotY", method = "setPivotY"),
39})
40public class ViewBindingAdapter {
41    public static int FADING_EDGE_NONE = 0;
42    public static int FADING_EDGE_HORIZONTAL = 1;
43    public static int FADING_EDGE_VERTICAL = 2;
44
45    @BindingAdapter("android:padding")
46    public static void setPadding(View view, int padding) {
47        view.setPadding(padding, padding, padding, padding);
48    }
49
50    @BindingAdapter("android:paddingBottom")
51    public static void setPaddingBottom(View view, int padding) {
52        view.setPadding(view.getPaddingLeft(), view.getPaddingTop(), view.getPaddingRight(),
53                padding);
54    }
55
56    @BindingAdapter("android:paddingEnd")
57    public static void setPaddingEnd(View view, int padding) {
58        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
59            view.setPaddingRelative(view.getPaddingStart(), view.getPaddingTop(), padding,
60                    view.getPaddingBottom());
61        } else {
62            view.setPadding(view.getPaddingLeft(), view.getPaddingTop(), padding,
63                    view.getPaddingBottom());
64        }
65    }
66
67    @BindingAdapter("android:paddingLeft")
68    public static void setPaddingLeft(View view, int padding) {
69        view.setPadding(padding, view.getPaddingTop(), view.getPaddingRight(),
70                view.getPaddingBottom());
71    }
72
73    @BindingAdapter("android:paddingRight")
74    public static void setPaddingRight(View view, int padding) {
75        view.setPadding(view.getPaddingLeft(), view.getPaddingTop(), padding,
76                view.getPaddingBottom());
77    }
78
79    @BindingAdapter("android:paddingStart")
80    public static void setPaddingStart(View view, int padding) {
81        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
82            view.setPaddingRelative(padding, view.getPaddingTop(), view.getPaddingEnd(),
83                    view.getPaddingBottom());
84        } else {
85            view.setPadding(padding, view.getPaddingTop(), view.getPaddingRight(),
86                    view.getPaddingBottom());
87        }
88    }
89
90    @BindingAdapter("android:paddingTop")
91    public static void setPaddingTop(View view, int padding) {
92        view.setPadding(view.getPaddingLeft(), padding, view.getPaddingRight(),
93                view.getPaddingBottom());
94    }
95
96    @BindingAdapter("android:requiresFadingEdge")
97    public static void setRequiresFadingEdge(View view, int value) {
98        final boolean vertical = (value & FADING_EDGE_VERTICAL) != 0;
99        final boolean horizontal = (value & FADING_EDGE_HORIZONTAL) != 0;
100        view.setVerticalFadingEdgeEnabled(vertical);
101        view.setHorizontalFadingEdgeEnabled(horizontal);
102    }
103
104    @BindingAdapter(attributes={"android:onClickListener", "android:clickable"})
105    public static void setClickListener(View view, View.OnClickListener clickListener,
106            boolean clickable) {
107        view.setOnClickListener(clickListener);
108        view.setClickable(clickable);
109    }
110}
111