Android View 鏈式調用快捷設置 Helper 類

DevUtils Github

方法 註釋
get 獲取單例 ViewHelper
viewHelper 獲取 ViewHelper
devHelper 獲取 DevHelper
postRunnable 在主線程 Handler 中執行任務
removeRunnable 在主線程 Handler 中清除任務
setHint 設置 Hint 文本
setText 設置文本
setTexts 設置多個 TextView 文本
setHtmlText 設置 Html 內容
setHtmlTexts 設置多個 TextView Html 內容
setHintTextColor 設置 Hint 字體顏色
setHintTextColors 設置多個 TextView Hint 字體顏色
setTextColor 設置字體顏色
setTextColors 設置多個 TextView 字體顏色
setTypeface 設置字體
setTextSizeByPx 設置字體大小 - px 像素
setTextSizeBySp 設置字體大小 - sp 縮放像素
setTextSizeByDp 設置字體大小 - dp 與設備無關的像素
setTextSizeByIn 設置字體大小 - inches 英寸
setTextSize 設置字體大小
setTextSizes 設置多個 TextView 字體大小
clearFlags 清空 flags
setBold 設置 TextView 是否加粗
setUnderlineText 設置下劃線
setStrikeThruText 設置中劃線
setLetterSpacing 設置文字水平間距
setLineSpacing 設置文字行間距 ( 行高 )
setLineSpacingAndMultiplier 設置文字行間距 ( 行高 )、行間距倍數
setTextScaleX 設置字體水平方向的縮放
setIncludeFontPadding 設置是否保留字體留白間隙區域
setInputType 設置輸入類型
setImeOptions 設置軟鍵盤右下角按鈕類型
setLines 設置行數
setMaxLines 設置最大行數
setMinLines 設置最小行數
setMaxEms 設置最大字符寬度限制
setMinEms 設置最小字符寬度限制
setEms 設置指定字符寬度
setEllipsize 設置 Ellipsize 效果
setAutoLinkMask 設置自動識別文本鏈接
setAllCaps 設置文本全爲大寫
setTextGravity 設置 Text Gravity
insert 追加內容 ( 當前光標位置追加 )
setMaxLength 設置長度限制
setMaxLengthAndText 設置長度限制, 並且設置內容
setCursorVisible 設置是否顯示光標
setSelectionToTop 設置光標在第一位
setSelectionToBottom 設置光標在最後一位
setSelection 設置光標位置
setTransformationMethod 設置文本視圖顯示轉換
addTextChangedListener 添加輸入監聽事件
removeTextChangedListener 移除輸入監聽事件
setKeyListener 設置 KeyListener
setAdjustViewBounds 設置 ImageView 是否保持寬高比
setMaxHeight 設置 ImageView 最大高度
setMaxWidth 設置 ImageView 最大寬度
setBackground 設置背景圖片
setBackgroundColor 設置背景顏色
setBackgroundResource 設置背景資源
setBackgroundTintList 設置背景着色顏色
setBackgroundTintMode 設置背景着色模式
setForeground 設置前景圖片
setForegroundGravity 設置前景重心
setForegroundTintList 設置前景着色顏色
setForegroundTintMode 設置前景着色模式
setImageBitmap 設置 ImageView Bitmap
setImageDrawable 設置 ImageView Drawable
setImageResource 設置 ImageView 資源
setImageMatrix 設置 ImageView Matrix
setImageTintList 設置 ImageView 着色顏色
setImageTintMode 設置 ImageView 着色模式
setScaleType 設置 ImageView 縮放類型
setColorFilter ImageView 着色處理
setBackgroundResources 設置 View 圖片資源
setImageResources 設置 View 圖片資源
setImageBitmaps 設置 View Bitmap
setImageDrawables 設置 View Drawable
setScaleTypes 設置 View 縮放模式
setWidthHeight 設置 View 寬度、高度
setWidth 設置 View 寬度
setHeight 設置 View 高度
setMinimumHeight 設置 View 最小高度
setMinimumWidth 設置 View 最小寬度
setAlpha 設置 View 透明度
setTag 設置 View Tag
scrollTo View 內容滾動位置 - 相對於初始位置移動
scrollBy View 內部滾動位置 - 相對於上次移動的最後位置移動
setDescendantFocusability 設置 ViewGroup 和其子控件兩者之間的關係
setOverScrollMode 設置 View 滾動模式
setHorizontalScrollBarEnabled 設置是否繪製橫向滾動條
setVerticalScrollBarEnabled 設置是否繪製垂直滾動條
setScrollContainer 設置 View 滾動效應
setNextFocusForwardId 設置下一個獲取焦點的 View id
setNextFocusDownId 設置向下移動焦點時, 下一個獲取焦點的 View id
setNextFocusLeftId 設置向左移動焦點時, 下一個獲取焦點的 View id
setNextFocusRightId 設置向右移動焦點時, 下一個獲取焦點的 View id
setNextFocusUpId 設置向上移動焦點時, 下一個獲取焦點的 View id
setRotation 設置 View 旋轉度數
setRotationX 設置 View 水平旋轉度數
setRotationY 設置 View 豎直旋轉度數
setScaleX 設置 View 水平方向縮放比例
setScaleY 設置 View 豎直方向縮放比例
setTextAlignment 設置文本的顯示方式
setTextDirection 設置文本的顯示方向
setPivotX 設置水平方向偏轉量
setPivotY 設置豎直方向偏轉量
setTranslationX 設置水平方向的移動距離
setTranslationY 設置豎直方向的移動距離
setLayerType 設置 View 硬件加速類型
requestLayout 請求重新對 View 佈局
requestFocus View 請求獲取焦點
clearFocus View 清除焦點
requestLayoutParent View 請求更新
setLayoutParams 設置 View LayoutParams
setFocusableInTouchMode 設置 View 是否在觸摸模式下獲得焦點
setFocusable 設置 View 是否可以獲取焦點
setSelected 設置 View 是否選中
setEnabled 設置 View 是否啓用
setClickable 設置 View 是否可以點擊
setLongClickable 設置 View 是否可以長按
setVisibility 設置 View 顯示的狀態
setVisibilitys 設置 View 顯示的狀態
toggleVisibilitys 切換 View 顯示的狀態
reverseVisibilitys 反轉 View 顯示的狀態
removeSelfFromParent 把自身從父 View 中移除
setLayoutGravity 設置 View Layout Gravity
setMarginLeft 設置 View Left Margin
setMarginTop 設置 View Top Margin
setMarginRight 設置 View Right Margin
setMarginBottom 設置 View Bottom Margin
setMargin 設置 Margin 邊距
setPaddingLeft 設置 View Left Padding
setPaddingTop 設置 View Top Padding
setPaddingRight 設置 View Right Padding
setPaddingBottom 設置 View Bottom Padding
setPadding 設置 Padding 邊距
setCompoundDrawablesByLeft 設置 Left CompoundDrawables
setCompoundDrawablesByTop 設置 Top CompoundDrawables
setCompoundDrawablesByRight 設置 Right CompoundDrawables
setCompoundDrawablesByBottom 設置 Bottom CompoundDrawables
setCompoundDrawables 設置 CompoundDrawables
setCompoundDrawablesWithIntrinsicBoundsByLeft 設置 Left CompoundDrawables - 按照原有比例大小顯示圖片
setCompoundDrawablesWithIntrinsicBoundsByTop 設置 Top CompoundDrawables - 按照原有比例大小顯示圖片
setCompoundDrawablesWithIntrinsicBoundsByRight 設置 Right CompoundDrawables - 按照原有比例大小顯示圖片
setCompoundDrawablesWithIntrinsicBoundsByBottom 設置 Bottom CompoundDrawables - 按照原有比例大小顯示圖片
setCompoundDrawablesWithIntrinsicBounds 設置 CompoundDrawables - 按照原有比例大小顯示圖片
addRule 設置 RelativeLayout View 佈局規則
removeRule 移除 RelativeLayout View 佈局規則
addRules 設置多個 RelativeLayout View 佈局規則
removeRules 移除多個 RelativeLayout View 佈局規則
setAnimation 設置動畫
clearAnimation 清空動畫
startAnimation 啓動動畫
setOnClicks 設置點擊事件
setOnLongClicks 設置長按事件
addTouchArea 增加控件的觸摸範圍, 最大範圍只能是父佈局所包含的的區域
smoothScrollToPosition 滑動到指定索引 ( 有滾動過程 )
scrollToPosition 滑動到指定索引 ( 無滾動過程 )
smoothScrollToTop 滑動到頂部 ( 有滾動過程 )
scrollToTop 滑動到頂部 ( 無滾動過程 )
smoothScrollToBottom 滑動到底部 ( 有滾動過程 )
scrollToBottom 滑動到底部 ( 無滾動過程 )
smoothScrollTo 滾動到指定位置 ( 有滾動過程 ) - 相對於初始位置移動
smoothScrollBy 滾動到指定位置 ( 有滾動過程 ) - 相對於上次移動的最後位置移動
fullScroll 滾動方向 ( 有滾動過程 )
package dev.utils.app.helper;

import android.content.res.ColorStateList;
import android.graphics.Bitmap;
import android.graphics.ColorFilter;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.Typeface;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.support.annotation.ColorInt;
import android.support.annotation.DrawableRes;
import android.support.annotation.FloatRange;
import android.support.annotation.IdRes;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.text.method.KeyListener;
import android.text.method.TransformationMethod;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;

import dev.utils.app.ClickUtils;
import dev.utils.app.EditTextUtils;
import dev.utils.app.HandlerUtils;
import dev.utils.app.ImageViewUtils;
import dev.utils.app.ListViewUtils;
import dev.utils.app.ListenerUtils;
import dev.utils.app.TextViewUtils;
import dev.utils.app.ViewUtils;

/**
 * detail: View 鏈式調用快捷設置 Helper 類
 * @author Ttt
 * <pre>
 *     通過 DevApp 工具類快捷實現
 *     <p></p>
 *     DevApp Api
 *     @see <a href="https://github.com/afkT/DevUtils/blob/master/lib/DevApp/README.md"/>
 * </pre>
 */
public final class ViewHelper {

    // ViewHelper
    private static final ViewHelper HELPER = new ViewHelper();

    /**
     * 獲取單例 ViewHelper
     * @return {@link ViewHelper}
     */
    public static ViewHelper get() {
        return HELPER;
    }

    // ==========
    // = Helper =
    // ==========

    /**
     * 獲取 ViewHelper
     * @return {@link ViewHelper}
     */
    public ViewHelper viewHelper() {
        return this;
    }

    /**
     * 獲取 DevHelper
     * @return {@link DevHelper}
     */
    public DevHelper devHelper() {
        return DevHelper.get();
    }

    // ===========
    // = Handler =
    // ===========

    /**
     * 在主線程 Handler 中執行任務
     * @param runnable 可執行的任務
     * @return {@link ViewHelper}
     */
    public ViewHelper postRunnable(final Runnable runnable) {
        HandlerUtils.postRunnable(runnable);
        return this;
    }

    /**
     * 在主線程 Handler 中執行延遲任務
     * @param runnable    可執行的任務
     * @param delayMillis 延遲時間
     * @return {@link ViewHelper}
     */
    public ViewHelper postRunnable(final Runnable runnable, final long delayMillis) {
        HandlerUtils.postRunnable(runnable, delayMillis);
        return this;
    }

    /**
     * 在主線程 Handler 中執行延遲任務
     * @param runnable    可執行的任務
     * @param delayMillis 延遲時間
     * @param number      輪詢次數
     * @param interval    輪詢時間
     * @return {@link ViewHelper}
     */
    public ViewHelper postRunnable(final Runnable runnable, final long delayMillis, final int number, final int interval) {
        HandlerUtils.postRunnable(runnable, delayMillis, number, interval);
        return this;
    }

    /**
     * 在主線程 Handler 中執行延遲任務
     * @param runnable      可執行的任務
     * @param delayMillis   延遲時間
     * @param number        輪詢次數
     * @param interval      輪詢時間
     * @param onEndListener 結束通知
     * @return {@link ViewHelper}
     */
    public ViewHelper postRunnable(final Runnable runnable, final long delayMillis, final int number, final int interval, final HandlerUtils.OnEndListener onEndListener) {
        HandlerUtils.postRunnable(runnable, delayMillis, number, interval, onEndListener);
        return this;
    }

    /**
     * 在主線程 Handler 中清除任務
     * @param runnable 需要清除的任務
     * @return {@link ViewHelper}
     */
    public ViewHelper removeRunnable(final Runnable runnable) {
        HandlerUtils.removeRunnable(runnable);
        return this;
    }

    // ========
    // = Text =
    // ========

    /**
     * 設置 Hint 文本
     * @param view {@link TextView}
     * @param text Hint text
     * @return {@link ViewHelper}
     */
    public ViewHelper setHint(final View view, final String text) {
        TextViewUtils.setHint(view, text);
        return this;
    }

    /**
     * 設置文本
     * @param view {@link TextView}
     * @param text TextView text
     * @return {@link ViewHelper}
     */
    public ViewHelper setText(final View view, final String text) {
        if (view instanceof EditText) {
            EditTextUtils.setText(EditTextUtils.getEditText(view), text);
        } else {
            TextViewUtils.setText(view, text);
        }
        return this;
    }

    /**
     * 設置多個 TextView 文本
     * @param text  TextView text
     * @param views View(TextView)[]
     * @return {@link ViewHelper}
     */
    public ViewHelper setTexts(final String text, final View... views) {
        TextViewUtils.setTexts(text, views);
        return this;
    }

    /**
     * 設置 Html 內容
     * @param view    {@link TextView}
     * @param content Html content
     * @return {@link ViewHelper}
     */
    public ViewHelper setHtmlText(final View view, final String content) {
        TextViewUtils.setHtmlText(view, content);
        return this;
    }

    /**
     * 設置多個 TextView Html 內容
     * @param content Html content
     * @param views   View(TextView)[]
     * @return {@link ViewHelper}
     */
    public ViewHelper setHtmlTexts(final String content, final View... views) {
        TextViewUtils.setHtmlTexts(content, views);
        return this;
    }

    /**
     * 設置 Hint 字體顏色
     * @param view  {@link TextView}
     * @param color R.color.id
     * @return {@link ViewHelper}
     */
    public ViewHelper setHintTextColor(final View view, @ColorInt final int color) {
        TextViewUtils.setHintTextColor(view, color);
        return this;
    }

    /**
     * 設置 Hint 字體顏色
     * @param view   {@link TextView}
     * @param colors {@link ColorStateList}
     * @return {@link ViewHelper}
     */
    public ViewHelper setHintTextColor(final View view, final ColorStateList colors) {
        TextViewUtils.setHintTextColor(view, colors);
        return this;
    }

    /**
     * 設置多個 TextView Hint 字體顏色
     * @param color R.color.id
     * @param views View(TextView)[]
     * @return {@link ViewHelper}
     */
    public ViewHelper setHintTextColors(@ColorInt final int color, final View... views) {
        TextViewUtils.setHintTextColors(color, views);
        return this;
    }

    /**
     * 設置多個 TextView Hint 字體顏色
     * @param colors {@link ColorStateList}
     * @param views  View(TextView)[]
     * @return {@link ViewHelper}
     */
    public ViewHelper setHintTextColors(final ColorStateList colors, final View... views) {
        TextViewUtils.setHintTextColors(colors, views);
        return this;
    }

    /**
     * 設置字體顏色
     * @param view  {@link TextView}
     * @param color R.color.id
     * @return {@link ViewHelper}
     */
    public ViewHelper setTextColor(final View view, @ColorInt final int color) {
        TextViewUtils.setTextColor(view, color);
        return this;
    }

    /**
     * 設置字體顏色
     * @param view   {@link TextView}
     * @param colors {@link ColorStateList}
     * @return {@link ViewHelper}
     */
    public ViewHelper setTextColor(final View view, final ColorStateList colors) {
        TextViewUtils.setTextColor(view, colors);
        return this;
    }

    /**
     * 設置多個 TextView 字體顏色
     * @param color R.color.id
     * @param views View(TextView)[]
     * @return {@link ViewHelper}
     */
    public ViewHelper setTextColors(@ColorInt final int color, final View... views) {
        TextViewUtils.setTextColors(color, views);
        return this;
    }

    /**
     * 設置多個 TextView 字體顏色
     * @param colors {@link ColorStateList}
     * @param views  View(TextView)[]
     * @return {@link ViewHelper}
     */
    public ViewHelper setTextColors(final ColorStateList colors, final View... views) {
        TextViewUtils.setTextColors(colors, views);
        return this;
    }

    /**
     * 設置字體
     * @param view     {@link TextView}
     * @param typeface {@link Typeface} 字體樣式
     * @return {@link ViewHelper}
     */
    public ViewHelper setTypeface(final View view, final Typeface typeface) {
        TextViewUtils.setTypeface(view, typeface);
        return this;
    }

    /**
     * 設置字體大小 - px 像素
     * @param view {@link TextView}
     * @param size 字體大小
     * @return {@link ViewHelper}
     */
    public ViewHelper setTextSizeByPx(final View view, final float size) {
        TextViewUtils.setTextSizeByPx(view, size);
        return this;
    }

    /**
     * 設置字體大小 - sp 縮放像素
     * @param view {@link TextView}
     * @param size 字體大小
     * @return {@link ViewHelper}
     */
    public ViewHelper setTextSizeBySp(final View view, final float size) {
        TextViewUtils.setTextSizeBySp(view, size);
        return this;
    }

    /**
     * 設置字體大小 - dp 與設備無關的像素
     * @param view {@link TextView}
     * @param size 字體大小
     * @return {@link ViewHelper}
     */
    public ViewHelper setTextSizeByDp(final View view, final float size) {
        TextViewUtils.setTextSizeByDp(view, size);
        return this;
    }

    /**
     * 設置字體大小 - inches 英寸
     * @param view {@link TextView}
     * @param size 字體大小
     * @return {@link ViewHelper}
     */
    public ViewHelper setTextSizeByIn(final View view, final float size) {
        TextViewUtils.setTextSizeByIn(view, size);
        return this;
    }

    /**
     * 設置字體大小
     * @param view {@link TextView}
     * @param unit 字體參數類型
     * @param size 字體大小
     * @return {@link ViewHelper}
     */
    public ViewHelper setTextSize(final View view, final int unit, final float size) {
        TextViewUtils.setTextSize(view, unit, size);
        return this;
    }

    /**
     * 設置多個 TextView 字體大小
     * @param views View(TextView)[]
     * @param unit  參數類型
     * @param size  字體大小
     * @return {@link ViewHelper}
     */
    public ViewHelper setTextSizes(final View[] views, final int unit, final float size) {
        TextViewUtils.setTextSizes(views, unit, size);
        return this;
    }

    /**
     * 清空 flags
     * @param view {@link TextView}
     * @return {@link ViewHelper}
     */
    public ViewHelper clearFlags(final View view) {
        TextViewUtils.clearFlags(view);
        return this;
    }

    /**
     * 設置 TextView 是否加粗
     * @param view   {@link TextView}
     * @param isBold {@code true} yes, {@code false} no
     * @return {@link ViewHelper}
     */
    public ViewHelper setBold(final View view, final boolean isBold) {
        TextViewUtils.setBold(view, isBold);
        return this;
    }

    /**
     * 設置 TextView 是否加粗
     * @param view     {@link TextView}
     * @param typeface {@link Typeface} 字體樣式
     * @param isBold   {@code true} yes, {@code false} no
     * @return {@link ViewHelper}
     */
    public ViewHelper setBold(final View view, final Typeface typeface, final boolean isBold) {
        TextViewUtils.setBold(view, typeface, isBold);
        return this;
    }

    /**
     * 設置下劃線
     * @param view {@link TextView}
     * @return {@link ViewHelper}
     */
    public ViewHelper setUnderlineText(final View view) {
        TextViewUtils.setUnderlineText(view);
        return this;
    }

    /**
     * 設置下劃線並加清晰
     * @param view        {@link TextView}
     * @param isAntiAlias 是否消除鋸齒
     * @return {@link ViewHelper}
     */
    public ViewHelper setUnderlineText(final View view, final boolean isAntiAlias) {
        TextViewUtils.setUnderlineText(view, isAntiAlias);
        return this;
    }

    /**
     * 設置中劃線
     * @param view {@link TextView}
     * @return {@link ViewHelper}
     */
    public ViewHelper setStrikeThruText(final View view) {
        TextViewUtils.setStrikeThruText(view);
        return this;
    }

    /**
     * 設置中劃線並加清晰
     * @param view        {@link TextView}
     * @param isAntiAlias 是否消除鋸齒
     * @return {@link ViewHelper}
     */
    public ViewHelper setStrikeThruText(final View view, final boolean isAntiAlias) {
        TextViewUtils.setStrikeThruText(view, isAntiAlias);
        return this;
    }

    /**
     * 設置文字水平間距
     * @param view          {@link TextView}
     * @param letterSpacing 文字水平間距值
     * @return {@link ViewHelper}
     */
    public ViewHelper setLetterSpacing(final View view, final float letterSpacing) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            TextViewUtils.setLetterSpacing(view, letterSpacing);
        }
        return this;
    }

    /**
     * 設置文字行間距 ( 行高 )
     * @param view        {@link TextView}
     * @param lineSpacing 文字行間距 ( 行高 ), android:lineSpacingExtra
     * @return {@link ViewHelper}
     */
    public ViewHelper setLineSpacing(final View view, final float lineSpacing) {
        TextViewUtils.setLineSpacing(view, lineSpacing);
        return this;
    }

    /**
     * 設置文字行間距 ( 行高 )、行間距倍數
     * @param view        {@link TextView}
     * @param lineSpacing 文字行間距 ( 行高 ), android:lineSpacingExtra
     * @param multiplier  行間距倍數, android:lineSpacingMultiplier
     * @return {@link ViewHelper}
     */
    public ViewHelper setLineSpacingAndMultiplier(final View view, final float lineSpacing, final float multiplier) {
        TextViewUtils.setLineSpacingAndMultiplier(view, lineSpacing, multiplier);
        return this;
    }

    /**
     * 設置字體水平方向的縮放
     * @param view {@link TextView}
     * @param size 縮放比例
     * @return {@link ViewHelper}
     */
    public ViewHelper setTextScaleX(final View view, final float size) {
        TextViewUtils.setTextScaleX(view, size);
        return this;
    }

    /**
     * 設置是否保留字體留白間隙區域
     * @param view       {@link TextView}
     * @param includepad 是否保留字體留白間隙區域
     * @return {@link ViewHelper}
     */
    public ViewHelper setIncludeFontPadding(final View view, final boolean includepad) {
        TextViewUtils.setIncludeFontPadding(view, includepad);
        return this;
    }

    /**
     * 設置輸入類型
     * @param view {@link TextView}
     * @param type 類型
     * @return {@link ViewHelper}
     */
    public ViewHelper setInputType(final View view, final int type) {
        TextViewUtils.setInputType(view, type);
        return this;
    }

    /**
     * 設置軟鍵盤右下角按鈕類型
     * @param view       {@link TextView}
     * @param imeOptions 軟鍵盤按鈕類型
     * @return {@link ViewHelper}
     */
    public ViewHelper setImeOptions(final View view, final int imeOptions) {
        TextViewUtils.setImeOptions(view, imeOptions);
        return this;
    }

    /**
     * 設置行數
     * @param view  {@link TextView}
     * @param lines 行數
     * @return {@link ViewHelper}
     */
    public ViewHelper setLines(final View view, final int lines) {
        TextViewUtils.setLines(view, lines);
        return this;
    }

    /**
     * 設置最大行數
     * @param view     {@link TextView}
     * @param maxLines 最大行數
     * @return {@link ViewHelper}
     */
    public ViewHelper setMaxLines(final View view, final int maxLines) {
        TextViewUtils.setMaxLines(view, maxLines);
        return this;
    }

    /**
     * 設置最小行數
     * @param view     {@link TextView}
     * @param minLines 最小行數
     * @return {@link ViewHelper}
     */
    public ViewHelper setMinLines(final View view, final int minLines) {
        TextViewUtils.setMinLines(view, minLines);
        return this;
    }

    /**
     * 設置最大字符寬度限制
     * @param view   {@link TextView}
     * @param maxEms 最大字符
     * @return {@link ViewHelper}
     */
    public ViewHelper setMaxEms(final View view, final int maxEms) {
        TextViewUtils.setMaxEms(view, maxEms);
        return this;
    }

    /**
     * 設置最小字符寬度限制
     * @param view   {@link TextView}
     * @param minEms 最小字符
     * @return {@link ViewHelper}
     */
    public ViewHelper setMinEms(final View view, final int minEms) {
        TextViewUtils.setMinEms(view, minEms);
        return this;
    }

    /**
     * 設置指定字符寬度
     * @param view {@link TextView}
     * @param ems  字符
     * @return {@link ViewHelper}
     */
    public ViewHelper setEms(final View view, final int ems) {
        TextViewUtils.setEms(view, ems);
        return this;
    }

    /**
     * 設置 Ellipsize 效果
     * @param view  {@link TextView}
     * @param where {@link TextUtils.TruncateAt}
     * @return {@link ViewHelper}
     */
    public ViewHelper setEllipsize(final View view, final TextUtils.TruncateAt where) {
        TextViewUtils.setEllipsize(view, where);
        return this;
    }

    /**
     * 設置自動識別文本鏈接
     * @param view {@link TextView}
     * @param mask {@link android.text.util.Linkify}
     * @return {@link ViewHelper}
     */
    public ViewHelper setAutoLinkMask(final View view, final int mask) {
        TextViewUtils.setAutoLinkMask(view, mask);
        return this;
    }

    /**
     * 設置文本全爲大寫
     * @param view    {@link TextView}
     * @param allCaps 是否全部大寫
     * @return {@link ViewHelper}
     */
    public ViewHelper setAllCaps(final View view, final boolean allCaps) {
        TextViewUtils.setAllCaps(view, allCaps);
        return this;
    }

    /**
     * 設置 Text Gravity
     * @param view    {@link TextView}
     * @param gravity {@link android.view.Gravity}
     * @return {@link ViewHelper}
     */
    public ViewHelper setTextGravity(final View view, final int gravity) {
        TextViewUtils.setGravity(view, gravity);
        return this;
    }

    // ============
    // = EditText =
    // ============

    /**
     * 設置內容
     * @param editText {@link EditText}
     * @param content  文本內容
     * @param isSelect 是否設置光標
     * @return {@link ViewHelper}
     */
    public ViewHelper setText(final EditText editText, final String content, final boolean isSelect) {
        EditTextUtils.setText(editText, content, isSelect);
        return this;
    }

    /**
     * 追加內容 ( 當前光標位置追加 )
     * @param editText {@link EditText}
     * @param content  文本內容
     * @param isSelect 是否設置光標
     * @return {@link ViewHelper}
     */
    public ViewHelper insert(final EditText editText, final String content, final boolean isSelect) {
        EditTextUtils.insert(editText, content, isSelect);
        return this;
    }

    /**
     * 追加內容
     * @param editText {@link EditText}
     * @param content  文本內容
     * @param start    開始添加的位置
     * @param isSelect 是否設置光標
     * @return {@link ViewHelper}
     */
    public ViewHelper insert(final EditText editText, final String content, final int start, final boolean isSelect) {
        EditTextUtils.insert(editText, content, start, isSelect);
        return this;
    }

    /**
     * 設置長度限制
     * @param view      {@link View}
     * @param maxLength 長度限制
     * @return {@link ViewHelper}
     */
    public ViewHelper setMaxLength(final View view, final int maxLength) {
        if (view instanceof EditText) {
            EditTextUtils.setMaxLength(EditTextUtils.getEditText(view), maxLength);
        } else {
            TextViewUtils.setMaxLength(view, maxLength);
        }
        return this;
    }

    /**
     * 設置長度限制, 並且設置內容
     * @param view      {@link View}
     * @param content   文本內容
     * @param maxLength 長度限制
     * @return {@link ViewHelper}
     */
    public ViewHelper setMaxLengthAndText(final View view, final String content, final int maxLength) {
        if (view instanceof EditText) {
            EditTextUtils.setMaxLengthAndText(EditTextUtils.getEditText(view), content, maxLength);
        } else {
            TextViewUtils.setMaxLengthAndText(view, content, maxLength);
        }
        return this;
    }

    /**
     * 設置是否顯示光標
     * @param editText {@link EditText}
     * @param visible  是否顯示光標
     * @return {@link ViewHelper}
     */
    public ViewHelper setCursorVisible(final EditText editText, final boolean visible) {
        EditTextUtils.setCursorVisible(editText, visible);
        return this;
    }

    /**
     * 設置光標在第一位
     * @param editText {@link EditText}
     * @return {@link ViewHelper}
     */
    public ViewHelper setSelectionToTop(final EditText editText) {
        EditTextUtils.setSelectionToTop(editText);
        return this;
    }

    /**
     * 設置光標在最後一位
     * @param editText {@link EditText}
     * @return {@link ViewHelper}
     */
    public ViewHelper setSelectionToBottom(final EditText editText) {
        EditTextUtils.setSelectionToBottom(editText);
        return this;
    }

    /**
     * 設置光標位置
     * @param editText {@link EditText}
     * @param index    光標位置
     * @return {@link ViewHelper}
     */
    public ViewHelper setSelection(final EditText editText, final int index) {
        EditTextUtils.setSelection(editText, index);
        return this;
    }

    // =

    /**
     * 設置文本視圖顯示轉換
     * @param view   {@link View}
     * @param method {@link TransformationMethod}
     * @return {@link ViewHelper}
     */
    public ViewHelper setTransformationMethod(final View view, final TransformationMethod method) {
        if (view instanceof EditText) {
            EditTextUtils.setTransformationMethod(EditTextUtils.getEditText(view), method);
        } else {
            TextViewUtils.setTransformationMethod(view, method);
        }
        return this;
    }

    /**
     * 設置密碼文本視圖顯示轉換
     * @param view              {@link View}
     * @param isDisplayPassword 是否顯示密碼
     * @return {@link ViewHelper}
     */
    public ViewHelper setTransformationMethod(final View view, final boolean isDisplayPassword) {
        if (view instanceof EditText) {
            EditTextUtils.setTransformationMethod(EditTextUtils.getEditText(view), isDisplayPassword);
        } else {
            TextViewUtils.setTransformationMethod(view, isDisplayPassword);
        }
        return this;
    }

    /**
     * 設置密碼文本視圖顯示轉換
     * @param editText          {@link EditText}
     * @param isDisplayPassword 是否顯示密碼
     * @param isSelectBottom    是否設置光標到最後
     * @return {@link ViewHelper}
     */
    public ViewHelper setTransformationMethod(final EditText editText, final boolean isDisplayPassword, final boolean isSelectBottom) {
        EditTextUtils.setTransformationMethod(editText, isDisplayPassword, isSelectBottom);
        return this;
    }

    // =

    /**
     * 添加輸入監聽事件
     * @param editText {@link EditText}
     * @param watcher  輸入監聽
     * @return {@link ViewHelper}
     */
    public ViewHelper addTextChangedListener(final EditText editText, final TextWatcher watcher) {
        EditTextUtils.addTextChangedListener(editText, watcher);
        return this;
    }

    /**
     * 移除輸入監聽事件
     * @param editText {@link EditText}
     * @param watcher  輸入監聽
     * @return {@link ViewHelper}
     */
    public ViewHelper removeTextChangedListener(final EditText editText, final TextWatcher watcher) {
        EditTextUtils.removeTextChangedListener(editText, watcher);
        return this;
    }

    /**
     * 設置 KeyListener
     * @param editText    {@link EditText}
     * @param keyListener {@link KeyListener}
     * @return {@link ViewHelper}
     */
    public ViewHelper setKeyListener(final EditText editText, final KeyListener keyListener) {
        EditTextUtils.setKeyListener(editText, keyListener);
        return this;
    }

    /**
     * 設置 KeyListener
     * @param editText {@link EditText}
     * @param accepted 允許輸入的內容, 如: 0123456789
     * @return {@link ViewHelper}
     */
    public ViewHelper setKeyListener(final EditText editText, final String accepted) {
        EditTextUtils.setKeyListener(editText, accepted);
        return this;
    }

    /**
     * 設置 KeyListener
     * @param editText {@link EditText}
     * @param accepted 允許輸入的內容
     * @return {@link ViewHelper}
     */
    public ViewHelper setKeyListener(final EditText editText, final char[] accepted) {
        EditTextUtils.setKeyListener(editText, accepted);
        return this;
    }

    // =========
    // = Image =
    // =========

    /**
     * 設置 ImageView 是否保持寬高比
     * @param imageView        ImageView
     * @param adjustViewBounds 是否調整此視圖的邊界以保持可繪製的原始縱橫比
     * @return {@link ViewHelper}
     */
    public ViewHelper setAdjustViewBounds(final ImageView imageView, final boolean adjustViewBounds) {
        ImageViewUtils.setAdjustViewBounds(imageView, adjustViewBounds);
        return this;
    }

    /**
     * 設置 ImageView 最大高度
     * @param imageView ImageView
     * @param maxHeight 最大高度
     * @return {@link ViewHelper}
     */
    public ViewHelper setMaxHeight(final ImageView imageView, final int maxHeight) {
        ImageViewUtils.setMaxHeight(imageView, maxHeight);
        return this;
    }

    /**
     * 設置 ImageView 最大寬度
     * @param imageView ImageView
     * @param maxWidth  最大寬度
     * @return {@link ViewHelper}
     */
    public ViewHelper setMaxWidth(final ImageView imageView, final int maxWidth) {
        ImageViewUtils.setMaxWidth(imageView, maxWidth);
        return this;
    }

    // =

    /**
     * 設置背景圖片
     * @param view       {@link View}
     * @param background 背景圖片
     * @return {@link ViewHelper}
     */
    public ViewHelper setBackground(final View view, final Drawable background) {
        ImageViewUtils.setBackground(view, background);
        return this;
    }

    /**
     * 設置背景顏色
     * @param view  {@link View}
     * @param color 背景顏色
     * @return {@link ViewHelper}
     */
    public ViewHelper setBackgroundColor(final View view, @ColorInt final int color) {
        ImageViewUtils.setBackgroundColor(view, color);
        return this;
    }

    /**
     * 設置背景資源
     * @param view  {@link View}
     * @param resId resource identifier
     * @return {@link ViewHelper}
     */
    public ViewHelper setBackgroundResource(final View view, @DrawableRes final int resId) {
        ImageViewUtils.setBackgroundResource(view, resId);
        return this;
    }

    /**
     * 設置背景着色顏色
     * @param view {@link View}
     * @param tint 着色顏色
     * @return {@link ViewHelper}
     */
    public ViewHelper setBackgroundTintList(final View view, final ColorStateList tint) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            ImageViewUtils.setBackgroundTintList(view, tint);
        }
        return this;
    }

    /**
     * 設置背景着色模式
     * @param view     {@link View}
     * @param tintMode 着色模式 {@link PorterDuff.Mode}
     * @return {@link ViewHelper}
     */
    public ViewHelper setBackgroundTintMode(final View view, final PorterDuff.Mode tintMode) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            ImageViewUtils.setBackgroundTintMode(view, tintMode);
        }
        return this;
    }

    /**
     * 設置前景圖片
     * @param view       {@link View}
     * @param foreground 前景圖片
     * @return {@link ViewHelper}
     */
    public ViewHelper setForeground(final View view, final Drawable foreground) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            ImageViewUtils.setForeground(view, foreground);
        }
        return this;
    }

    /**
     * 設置前景重心
     * @param view    {@link View}
     * @param gravity 重心
     * @return {@link ViewHelper}
     */
    public ViewHelper setForegroundGravity(final View view, final int gravity) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            ImageViewUtils.setForegroundGravity(view, gravity);
        }
        return this;
    }

    /**
     * 設置前景着色顏色
     * @param view {@link View}
     * @param tint 着色顏色
     * @return {@link ViewHelper}
     */
    public ViewHelper setForegroundTintList(final View view, final ColorStateList tint) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            ImageViewUtils.setForegroundTintList(view, tint);
        }
        return this;
    }

    /**
     * 設置前景着色模式
     * @param view     {@link View}
     * @param tintMode 着色模式 {@link PorterDuff.Mode}
     * @return {@link ViewHelper}
     */
    public ViewHelper setForegroundTintMode(final View view, final PorterDuff.Mode tintMode) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            ImageViewUtils.setForegroundTintMode(view, tintMode);
        }
        return this;
    }

    /**
     * 設置 ImageView Bitmap
     * @param view   {@link View}
     * @param bitmap {@link Bitmap}
     * @return {@link ViewHelper}
     */
    public ViewHelper setImageBitmap(final View view, final Bitmap bitmap) {
        ImageViewUtils.setImageBitmap(view, bitmap);
        return this;
    }

    /**
     * 設置 ImageView Drawable
     * @param view     {@link View}
     * @param drawable {@link Bitmap}
     * @return {@link ViewHelper}
     */
    public ViewHelper setImageDrawable(final View view, final Drawable drawable) {
        ImageViewUtils.setImageDrawable(view, drawable);
        return this;
    }

    /**
     * 設置 ImageView 資源
     * @param view  {@link View}
     * @param resId resource identifier
     * @return {@link ViewHelper}
     */
    public ViewHelper setImageResource(final View view, @DrawableRes final int resId) {
        ImageViewUtils.setImageResource(view, resId);
        return this;
    }

    /**
     * 設置 ImageView Matrix
     * @param view   {@link View}
     * @param matrix {@link Matrix}
     * @return {@link ViewHelper}
     */
    public ViewHelper setImageMatrix(final View view, final Matrix matrix) {
        ImageViewUtils.setImageMatrix(view, matrix);
        return this;
    }

    /**
     * 設置 ImageView 着色顏色
     * @param view {@link View}
     * @param tint 着色顏色
     * @return {@link ViewHelper}
     */
    public ViewHelper setImageTintList(final View view, final ColorStateList tint) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            ImageViewUtils.setImageTintList(view, tint);
        }
        return this;
    }

    /**
     * 設置 ImageView 着色模式
     * @param view     {@link View}
     * @param tintMode 着色模式 {@link PorterDuff.Mode}
     * @return {@link ViewHelper}
     */
    public ViewHelper setImageTintMode(final View view, final PorterDuff.Mode tintMode) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            ImageViewUtils.setImageTintMode(view, tintMode);
        }
        return this;
    }

    /**
     * 設置 ImageView 縮放類型
     * @param view      {@link View}
     * @param scaleType 縮放類型 {@link ImageView.ScaleType}
     * @return {@link ViewHelper}
     */
    public ViewHelper setScaleType(final View view, final ImageView.ScaleType scaleType) {
        ImageViewUtils.setScaleType(view, scaleType);
        return this;
    }

    /**
     * ImageView 着色處理
     * @param imageView {@link ImageView}
     * @param color     顏色值
     * @return {@link ViewHelper}
     */
    public ViewHelper setColorFilter(final ImageView imageView, @ColorInt final int color) {
        ImageViewUtils.setColorFilter(imageView, color);
        return this;
    }

    /**
     * ImageView 着色處理, 並且設置 Drawable
     * @param imageView {@link ImageView}
     * @param drawable  {@link Drawable}
     * @param color     顏色值
     * @return {@link ViewHelper}
     */
    public ViewHelper setColorFilter(final ImageView imageView, final Drawable drawable, @ColorInt final int color) {
        ImageViewUtils.setColorFilter(imageView, drawable, color);
        return this;
    }

    /**
     * ImageView 着色處理
     * @param imageView   {@link ImageView}
     * @param colorFilter 顏色過濾 ( 效果 )
     * @return {@link ViewHelper}
     */
    public ViewHelper setColorFilter(final ImageView imageView, final ColorFilter colorFilter) {
        ImageViewUtils.setColorFilter(imageView, colorFilter);
        return this;
    }

    /**
     * ImageView 着色處理, 並且設置 Drawable
     * @param imageView   {@link ImageView}
     * @param drawable    {@link Drawable}
     * @param colorFilter 顏色過濾 ( 效果 )
     * @return {@link ViewHelper}
     */
    public ViewHelper setColorFilter(final ImageView imageView, final Drawable drawable, final ColorFilter colorFilter) {
        ImageViewUtils.setColorFilter(imageView, drawable, colorFilter);
        return this;
    }

    /**
     * 設置 View 圖片資源
     * @param resId resource identifier
     * @param views View[]
     * @return {@link ViewHelper}
     */
    public ViewHelper setBackgroundResources(@DrawableRes final int resId, final View... views) {
        ImageViewUtils.setBackgroundResources(resId, views);
        return this;
    }

    /**
     * 設置 View 圖片資源
     * @param resId        resource identifier
     * @param isVisibility {@link View#VISIBLE}、{@link View#INVISIBLE}、{@link View#GONE}
     * @param views        View[]
     * @return {@link ViewHelper}
     */
    public ViewHelper setBackgroundResources(@DrawableRes final int resId, final int isVisibility, final View... views) {
        ImageViewUtils.setBackgroundResources(resId, isVisibility, views);
        return this;
    }

    /**
     * 設置 View 圖片資源
     * @param resId resource identifier
     * @param views View[]
     * @return {@link ViewHelper}
     */
    public ViewHelper setImageResources(@DrawableRes final int resId, final View... views) {
        ImageViewUtils.setImageResources(resId, views);
        return this;
    }

    /**
     * 設置 View 圖片資源
     * @param resId        resource identifier
     * @param isVisibility {@link View#VISIBLE}、{@link View#INVISIBLE}、{@link View#GONE}
     * @param views        View[]
     * @return {@link ViewHelper}
     */
    public ViewHelper setImageResources(@DrawableRes final int resId, final int isVisibility, final View... views) {
        ImageViewUtils.setImageResources(resId, isVisibility, views);
        return this;
    }

    /**
     * 設置 View Bitmap
     * @param bitmap {@link Bitmap}
     * @param views  View[]
     * @return {@link ViewHelper}
     */
    public ViewHelper setImageBitmaps(final Bitmap bitmap, final View... views) {
        ImageViewUtils.setImageBitmaps(bitmap, views);
        return this;
    }

    /**
     * 設置 View Bitmap
     * @param bitmap       {@link Bitmap}
     * @param isVisibility {@link View#VISIBLE}、{@link View#INVISIBLE}、{@link View#GONE}
     * @param views        View[]
     * @return {@link ViewHelper}
     */
    public ViewHelper setImageBitmaps(final Bitmap bitmap, final int isVisibility, final View... views) {
        ImageViewUtils.setImageBitmaps(bitmap, isVisibility, views);
        return this;
    }

    /**
     * 設置 View Drawable
     * @param drawable {@link drawable}
     * @param views    View[]
     * @return {@link ViewHelper}
     */
    public ViewHelper setImageDrawables(final Drawable drawable, final View... views) {
        ImageViewUtils.setImageDrawables(drawable, views);
        return this;
    }

    /**
     * 設置 View Drawable
     * @param drawable     {@link drawable}
     * @param isVisibility {@link View#VISIBLE}、{@link View#INVISIBLE}、{@link View#GONE}
     * @param views        View[]
     * @return {@link ViewHelper}
     */
    public ViewHelper setImageDrawables(final Drawable drawable, final int isVisibility, final View... views) {
        ImageViewUtils.setImageDrawables(drawable, isVisibility, views);
        return this;
    }

    /**
     * 設置 View 縮放模式
     * @param scaleType {@link ImageView.ScaleType}
     * @param views     View[]
     * @return {@link ViewHelper}
     */
    public ViewHelper setScaleTypes(final ImageView.ScaleType scaleType, final View... views) {
        ImageViewUtils.setScaleTypes(scaleType, views);
        return this;
    }

    /**
     * 設置 View 縮放模式
     * @param scaleType    {@link ImageView.ScaleType}
     * @param isVisibility {@link View#VISIBLE}、{@link View#INVISIBLE}、{@link View#GONE}
     * @param views        View[]
     * @return {@link ViewHelper}
     */
    public ViewHelper setScaleTypes(final ImageView.ScaleType scaleType, final int isVisibility, final View... views) {
        ImageViewUtils.setScaleTypes(scaleType, isVisibility, views);
        return this;
    }

    // ========
    // = View =
    // ========

    /**
     * 設置 View 寬度、高度
     * @param view   {@link View}
     * @param width  View 寬度
     * @param height View 高度
     * @return {@link ViewHelper}
     */
    public ViewHelper setWidthHeight(final View view, final int width, final int height) {
        ViewUtils.setWidthHeight(view, width, height);
        return this;
    }

    /**
     * 設置 View 寬度、高度
     * @param view      {@link View}
     * @param width     View 寬度
     * @param height    View 高度
     * @param nullNewLP 如果 LayoutParams 爲 null 是否創建新的
     * @return {@link ViewHelper}
     */
    public ViewHelper setWidthHeight(final View view, final int width, final int height, final boolean nullNewLP) {
        ViewUtils.setWidthHeight(view, width, height, nullNewLP);
        return this;
    }

    /**
     * 設置 View 寬度
     * @param view  {@link View}
     * @param width View 寬度
     * @return {@link ViewHelper}
     */
    public ViewHelper setWidth(final View view, final int width) {
        ViewUtils.setWidth(view, width);
        return this;
    }

    /**
     * 設置 View 寬度
     * @param view      {@link View}
     * @param width     View 寬度
     * @param nullNewLP 如果 LayoutParams 爲 null 是否創建新的
     * @return {@link ViewHelper}
     */
    public ViewHelper setWidth(final View view, final int width, final boolean nullNewLP) {
        ViewUtils.setWidth(view, width, nullNewLP);
        return this;
    }

    /**
     * 設置 View 高度
     * @param view   {@link View}
     * @param height View 高度
     * @return {@link ViewHelper}
     */
    public ViewHelper setHeight(final View view, final int height) {
        ViewUtils.setHeight(view, height);
        return this;
    }

    /**
     * 設置 View 高度
     * @param view      {@link View}
     * @param height    View 高度
     * @param nullNewLP 如果 LayoutParams 爲 null 是否創建新的
     * @return {@link ViewHelper}
     */
    public ViewHelper setHeight(final View view, final int height, final boolean nullNewLP) {
        ViewUtils.setHeight(view, height, nullNewLP);
        return this;
    }

    /**
     * 設置 View 最小高度
     * @param view      {@link View}
     * @param minHeight 最小高度
     * @return {@link ViewHelper}
     */
    public ViewHelper setMinimumHeight(final View view, final int minHeight) {
        ViewUtils.setMinimumHeight(view, minHeight);
        return this;
    }

    /**
     * 設置 View 最小寬度
     * @param view     {@link View}
     * @param minWidth 最小寬度
     * @return {@link ViewHelper}
     */
    public ViewHelper setMinimumWidth(final View view, final int minWidth) {
        ViewUtils.setMinimumWidth(view, minWidth);
        return this;
    }

    /**
     * 設置 View 透明度
     * @param view  View
     * @param alpha 透明度
     * @return {@link ViewHelper}
     */
    public ViewHelper setAlpha(final View view, @FloatRange(from = 0.0, to = 1.0) final float alpha) {
        ViewUtils.setAlpha(view, alpha);
        return this;
    }

    /**
     * 設置 View Tag
     * @param view   View
     * @param object Tag
     * @return {@link ViewHelper}
     */
    public ViewHelper setTag(final View view, final Object object) {
        ViewUtils.setTag(view, object);
        return this;
    }

    // =

    /**
     * View 內容滾動位置 - 相對於初始位置移動
     * <pre>
     *     無滾動過程
     * </pre>
     * @param view {@link View}
     * @param x    X 軸開始座標
     * @param y    Y 軸開始座標
     * @return {@link ViewHelper}
     */
    public ViewHelper scrollTo(final View view, final int x, final int y) {
        ViewUtils.scrollTo(view, x, y);
        return this;
    }

    /**
     * View 內部滾動位置 - 相對於上次移動的最後位置移動
     * <pre>
     *     無滾動過程
     * </pre>
     * @param view {@link View}
     * @param x    X 軸開始座標
     * @param y    Y 軸開始座標
     * @return {@link ViewHelper}
     */
    public ViewHelper scrollBy(final View view, final int x, final int y) {
        ViewUtils.scrollBy(view, x, y);
        return this;
    }

    // =

    /**
     * 設置 ViewGroup 和其子控件兩者之間的關係
     * <pre>
     *     beforeDescendants : ViewGroup 會優先其子類控件而獲取到焦點
     *     afterDescendants : ViewGroup 只有當其子類控件不需要獲取焦點時才獲取焦點
     *     blocksDescendants : ViewGroup 會覆蓋子類控件而直接獲得焦點
     *     android:descendantFocusability="blocksDescendants"
     * </pre>
     * @param view         {@link ViewGroup}
     * @param focusability {@link ViewGroup#FOCUS_BEFORE_DESCENDANTS}、{@link ViewGroup#FOCUS_AFTER_DESCENDANTS}、{@link ViewGroup#FOCUS_BLOCK_DESCENDANTS}
     * @return {@link ViewHelper}
     */
    public ViewHelper setDescendantFocusability(final ViewGroup view, final int focusability) {
        ViewUtils.setDescendantFocusability(view, focusability);
        return this;
    }

    /**
     * 設置 View 滾動模式
     * <pre>
     *     設置滑動到邊緣時無效果模式 {@link View#OVER_SCROLL_NEVER}
     *     android:overScrollMode="never"
     * </pre>
     * @param view           {@link View}
     * @param overScrollMode {@link View#OVER_SCROLL_ALWAYS}、{@link View#OVER_SCROLL_IF_CONTENT_SCROLLS}、{@link View#OVER_SCROLL_NEVER}
     * @return {@link ViewHelper}
     */
    public ViewHelper setOverScrollMode(final View view, final int overScrollMode) {
        ViewUtils.setOverScrollMode(view, overScrollMode);
        return this;
    }

    // =

    /**
     * 設置是否繪製橫向滾動條
     * @param view                       {@link View}
     * @param horizontalScrollBarEnabled {@code true} yes, {@code false} no
     * @return {@link ViewHelper}
     */
    public ViewHelper setHorizontalScrollBarEnabled(final View view, final boolean horizontalScrollBarEnabled) {
        ViewUtils.setHorizontalScrollBarEnabled(view, horizontalScrollBarEnabled);
        return this;
    }

    /**
     * 設置是否繪製垂直滾動條
     * @param view                     {@link View}
     * @param verticalScrollBarEnabled {@code true} yes, {@code false} no
     * @return {@link ViewHelper}
     */
    public ViewHelper setVerticalScrollBarEnabled(final View view, final boolean verticalScrollBarEnabled) {
        ViewUtils.setVerticalScrollBarEnabled(view, verticalScrollBarEnabled);
        return this;
    }

    // =

    /**
     * 設置 View 滾動效應
     * @param view              {@link View}
     * @param isScrollContainer 是否需要滾動效應
     * @return {@link ViewHelper}
     */
    public ViewHelper setScrollContainer(final View view, final boolean isScrollContainer) {
        ViewUtils.setScrollContainer(view, isScrollContainer);
        return this;
    }

    /**
     * 設置下一個獲取焦點的 View id
     * @param view               {@link View}
     * @param nextFocusForwardId 下一個獲取焦點的 View id
     * @return {@link ViewHelper}
     */
    public ViewHelper setNextFocusForwardId(final View view, @IdRes final int nextFocusForwardId) {
        ViewUtils.setNextFocusForwardId(view, nextFocusForwardId);
        return this;
    }

    /**
     * 設置向下移動焦點時, 下一個獲取焦點的 View id
     * @param view            {@link View}
     * @param nextFocusDownId 下一個獲取焦點的 View id
     * @return {@link ViewHelper}
     */
    public ViewHelper setNextFocusDownId(final View view, @IdRes final int nextFocusDownId) {
        ViewUtils.setNextFocusDownId(view, nextFocusDownId);
        return this;
    }

    /**
     * 設置向左移動焦點時, 下一個獲取焦點的 View id
     * @param view            {@link View}
     * @param nextFocusLeftId 下一個獲取焦點的 View id
     * @return {@link ViewHelper}
     */
    public ViewHelper setNextFocusLeftId(final View view, @IdRes final int nextFocusLeftId) {
        ViewUtils.setNextFocusLeftId(view, nextFocusLeftId);
        return this;
    }

    /**
     * 設置向右移動焦點時, 下一個獲取焦點的 View id
     * @param view             {@link View}
     * @param nextFocusRightId 下一個獲取焦點的 View id
     * @return {@link ViewHelper}
     */
    public ViewHelper setNextFocusRightId(final View view, @IdRes final int nextFocusRightId) {
        ViewUtils.setNextFocusRightId(view, nextFocusRightId);
        return this;
    }

    /**
     * 設置向上移動焦點時, 下一個獲取焦點的 View id
     * @param view          {@link View}
     * @param nextFocusUpId 下一個獲取焦點的 View id
     * @return {@link ViewHelper}
     */
    public ViewHelper setNextFocusUpId(final View view, @IdRes final int nextFocusUpId) {
        ViewUtils.setNextFocusUpId(view, nextFocusUpId);
        return this;
    }

    /**
     * 設置 View 旋轉度數
     * @param view     {@link View}
     * @param rotation 旋轉度數
     * @return {@link ViewHelper}
     */
    public ViewHelper setRotation(final View view, final float rotation) {
        ViewUtils.setRotation(view, rotation);
        return this;
    }

    /**
     * 設置 View 水平旋轉度數
     * @param view      {@link View}
     * @param rotationX 水平旋轉度數
     * @return {@link ViewHelper}
     */
    public ViewHelper setRotationX(final View view, final float rotationX) {
        ViewUtils.setRotationX(view, rotationX);
        return this;
    }

    /**
     * 設置 View 豎直旋轉度數
     * @param view      {@link View}
     * @param rotationY 豎直旋轉度數
     * @return {@link ViewHelper}
     */
    public ViewHelper setRotationY(final View view, final float rotationY) {
        ViewUtils.setRotationY(view, rotationY);
        return this;
    }

    /**
     * 設置 View 水平方向縮放比例
     * @param view   View
     * @param scaleX 水平方向縮放比例
     * @return {@link ViewHelper}
     */
    public ViewHelper setScaleX(final View view, final float scaleX) {
        ViewUtils.setScaleX(view, scaleX);
        return this;
    }

    /**
     * 設置 View 豎直方向縮放比例
     * @param view   View
     * @param scaleY 豎直方向縮放比例
     * @return {@link ViewHelper}
     */
    public ViewHelper setScaleY(final View view, final float scaleY) {
        ViewUtils.setScaleY(view, scaleY);
        return this;
    }

    /**
     * 設置文本的顯示方式
     * @param view          {@link View}
     * @param textAlignment 文本的顯示方式
     * @return {@link ViewHelper}
     */
    public ViewHelper setTextAlignment(final View view, final int textAlignment) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
            ViewUtils.setTextAlignment(view, textAlignment);
        }
        return this;
    }

    /**
     * 設置文本的顯示方向
     * @param view          {@link View}
     * @param textDirection 文本的顯示方向
     * @return {@link ViewHelper}
     */
    public ViewHelper setTextDirection(final View view, final int textDirection) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
            ViewUtils.setTextDirection(view, textDirection);
        }
        return this;
    }

    /**
     * 設置水平方向偏轉量
     * @param view   View
     * @param pivotX 水平方向偏轉量
     * @return {@link ViewHelper}
     */
    public ViewHelper setPivotX(final View view, final float pivotX) {
        ViewUtils.setPivotX(view, pivotX);
        return this;
    }

    /**
     * 設置豎直方向偏轉量
     * @param view   View
     * @param pivotY 豎直方向偏轉量
     * @return {@link ViewHelper}
     */
    public ViewHelper setPivotY(final View view, final float pivotY) {
        ViewUtils.setPivotY(view, pivotY);
        return this;
    }

    /**
     * 設置水平方向的移動距離
     * @param view         {@link View}
     * @param translationX 水平方向的移動距離
     * @return {@link ViewHelper}
     */
    public ViewHelper setTranslationX(final View view, final float translationX) {
        ViewUtils.setTranslationX(view, translationX);
        return this;
    }

    /**
     * 設置豎直方向的移動距離
     * @param view         {@link View}
     * @param translationY 豎直方向的移動距離
     * @return {@link ViewHelper}
     */
    public ViewHelper setTranslationY(final View view, final float translationY) {
        ViewUtils.setTranslationY(view, translationY);
        return this;
    }

    /**
     * 設置 View 硬件加速類型
     * @param view      {@link View}
     * @param layerType 硬件加速類型
     * @param paint     {@link Paint}
     * @return {@link ViewHelper}
     */
    public ViewHelper setLayerType(final View view, final int layerType, final Paint paint) {
        ViewUtils.setLayerType(view, layerType, paint);
        return this;
    }

    // =

    /**
     * 請求重新對 View 佈局
     * @param view {@link View}
     * @return {@link ViewHelper}
     */
    public ViewHelper requestLayout(final View view) {
        ViewUtils.requestLayout(view);
        return this;
    }

    /**
     * View 請求獲取焦點
     * @param view {@link View}
     * @return {@link ViewHelper}
     */
    public ViewHelper requestFocus(final View view) {
        ViewUtils.requestFocus(view);
        return this;
    }

    /**
     * View 清除焦點
     * @param view {@link View}
     * @return {@link ViewHelper}
     */
    public ViewHelper clearFocus(final View view) {
        ViewUtils.clearFocus(view);
        return this;
    }

    /**
     * View 請求更新
     * @param view      {@link View}
     * @param allParent 是否全部父佈局 View 都請求
     * @return {@link ViewHelper}
     */
    public ViewHelper requestLayoutParent(final View view, final boolean allParent) {
        ViewUtils.requestLayoutParent(view, allParent);
        return this;
    }

    // =

    /**
     * 設置 View LayoutParams
     * @param view   {@link View}
     * @param params LayoutParams
     * @return {@link ViewHelper}
     */
    public ViewHelper setLayoutParams(final View view, final ViewGroup.LayoutParams params) {
        ViewUtils.setLayoutParams(view, params);
        return this;
    }

    /**
     * 設置 View 是否在觸摸模式下獲得焦點
     * @param focusableInTouchMode {@code true} 可獲取, {@code false} 不可獲取
     * @param views                View[]
     * @return {@link ViewHelper}
     */
    public ViewHelper setFocusableInTouchMode(final boolean focusableInTouchMode, final View... views) {
        ViewUtils.setFocusableInTouchMode(focusableInTouchMode, views);
        return this;
    }

    /**
     * 設置 View 是否可以獲取焦點
     * @param focusable {@code true} 可獲取, {@code false} 不可獲取
     * @param views     View[]
     * @return {@link ViewHelper}
     */
    public ViewHelper setFocusable(final boolean focusable, final View... views) {
        ViewUtils.setFocusable(focusable, views);
        return this;
    }

    /**
     * 設置 View 是否選中
     * @param selected {@code true} 選中, {@code false} 非選中
     * @param views    View[]
     * @return {@code true} 選中, {@code false} 非選中
     */
    public ViewHelper setSelected(final boolean selected, final View... views) {
        ViewUtils.setSelected(selected, views);
        return this;
    }

    /**
     * 設置 View 是否啓用
     * @param enabled {@code true} 啓用, {@code false} 禁用
     * @param views   View[]
     * @return {@link ViewHelper}
     */
    public ViewHelper setEnabled(final boolean enabled, final View... views) {
        ViewUtils.setEnabled(enabled, views);
        return this;
    }

    /**
     * 設置 View 是否可以點擊
     * @param clickable {@code true} 可點擊, {@code false} 不可點擊
     * @param views     View[]
     * @return {@link ViewHelper}
     */
    public ViewHelper setClickable(final boolean clickable, final View... views) {
        ViewUtils.setClickable(clickable, views);
        return this;
    }

    /**
     * 設置 View 是否可以長按
     * @param longClickable {@code true} 可長按, {@code false} 不可長按
     * @param views         View[]
     * @return {@link ViewHelper}
     */
    public ViewHelper setLongClickable(final boolean longClickable, final View... views) {
        ViewUtils.setLongClickable(longClickable, views);
        return this;
    }

    /**
     * 設置 View 顯示的狀態
     * @param isVisibility {@code true} View.VISIBLE, {@code false} View.GONE
     * @param view         {@link View}
     * @return {@link ViewHelper}
     */
    public ViewHelper setVisibility(final boolean isVisibility, final View view) {
        ViewUtils.setVisibility(isVisibility, view);
        return this;
    }

    /**
     * 設置 View 顯示的狀態
     * @param isVisibility {@link View#VISIBLE}、{@link View#INVISIBLE}、{@link View#GONE}
     * @param view         {@link View}
     * @return {@link ViewHelper}
     */
    public ViewHelper setVisibility(final int isVisibility, final View view) {
        ViewUtils.setVisibility(isVisibility, view);
        return this;
    }

    /**
     * 設置 View 顯示的狀態
     * @param isVisibility {@code true} View.VISIBLE, {@code false} View.GONE
     * @param views        View[]
     * @return {@link ViewHelper}
     */
    public ViewHelper setVisibilitys(final boolean isVisibility, final View... views) {
        ViewUtils.setVisibilitys(isVisibility, views);
        return this;
    }

    /**
     * 設置 View 顯示的狀態
     * @param isVisibility {@link View#VISIBLE}、{@link View#INVISIBLE}、{@link View#GONE}
     * @param views        View[]
     * @return {@link ViewHelper}
     */
    public ViewHelper setVisibilitys(final int isVisibility, final View... views) {
        ViewUtils.setVisibilitys(isVisibility, views);
        return this;
    }

    /**
     * 切換 View 顯示的狀態
     * @param view  {@link View}
     * @param views View[]
     * @return {@link ViewHelper}
     */
    public ViewHelper toggleVisibilitys(final View view, final View... views) {
        ViewUtils.toggleVisibilitys(view, views);
        return this;
    }

    /**
     * 切換 View 顯示的狀態
     * @param viewArys View[]
     * @param views    View[]
     * @return {@link ViewHelper}
     */
    public ViewHelper toggleVisibilitys(final View[] viewArys, final View... views) {
        ViewUtils.toggleVisibilitys(viewArys, views);
        return this;
    }

    /**
     * 切換 View 顯示的狀態
     * @param status   {@link View#VISIBLE}、{@link View#INVISIBLE}、{@link View#GONE}
     * @param viewArys View[]
     * @param views    View[]
     * @return {@link ViewHelper}
     */
    public ViewHelper toggleVisibilitys(final int status, final View[] viewArys, final View... views) {
        ViewUtils.toggleVisibilitys(status, viewArys, views);
        return this;
    }

    /**
     * 反轉 View 顯示的狀態
     * @param status   {@link View#VISIBLE}、{@link View#INVISIBLE}、{@link View#GONE}
     * @param viewArys View[]
     * @param views    View[]
     * @return {@link ViewHelper}
     */
    public ViewHelper reverseVisibilitys(final int status, final View[] viewArys, final View... views) {
        ViewUtils.reverseVisibilitys(status, viewArys, views);
        return this;
    }

    /**
     * 反轉 View 顯示的狀態
     * @param isVisibility {@code true} View.VISIBLE, {@code false} View.GONE
     * @param viewArys     View[]
     * @param views        View[]
     * @return {@link ViewHelper}
     */
    public ViewHelper reverseVisibilitys(final boolean isVisibility, final View[] viewArys, final View... views) {
        ViewUtils.reverseVisibilitys(isVisibility, viewArys, views);
        return this;
    }

    /**
     * 反轉 View 顯示的狀態
     * @param status {@link View#VISIBLE}、{@link View#INVISIBLE}、{@link View#GONE}
     * @param view   {@link View}
     * @param views  View[]
     * @return {@link ViewHelper}
     */
    public ViewHelper reverseVisibilitys(final int status, final View view, final View... views) {
        ViewUtils.reverseVisibilitys(status, view, views);
        return this;
    }

    /**
     * 反轉 View 顯示的狀態
     * @param isVisibility {@code true} View.VISIBLE, {@code false} View.GONE
     * @param view         {@link View}
     * @param views        View[]
     * @return {@link ViewHelper}
     */
    public ViewHelper reverseVisibilitys(final boolean isVisibility, final View view, final View... views) {
        ViewUtils.reverseVisibilitys(isVisibility, view, views);
        return this;
    }

    /**
     * 把自身從父 View 中移除
     * @param view {@link View}
     * @return {@link ViewHelper}
     */
    public ViewHelper removeSelfFromParent(final View view) {
        ViewUtils.removeSelfFromParent(view);
        return this;
    }

    /**
     * 設置 View Layout Gravity
     * @param view    {@link View}
     * @param gravity Gravity
     * @return {@link ViewHelper}
     */
    public ViewHelper setLayoutGravity(final View view, final int gravity) {
        ViewUtils.setLayoutGravity(view, gravity);
        return this;
    }

    /**
     * 設置 View Left Margin
     * @param view       {@link View}
     * @param leftMargin Left Margin
     * @return {@link ViewHelper}
     */
    public ViewHelper setMarginLeft(final View view, final int leftMargin) {
        ViewUtils.setMarginLeft(view, leftMargin);
        return this;
    }

    /**
     * 設置 View Left Margin
     * @param view       {@link View}
     * @param leftMargin Left Margin
     * @param reset      是否重置清空其他 margin
     * @return {@link ViewHelper}
     */
    public ViewHelper setMarginLeft(final View view, final int leftMargin, final boolean reset) {
        ViewUtils.setMarginLeft(view, leftMargin, reset);
        return this;
    }

    /**
     * 設置 View Top Margin
     * @param view      {@link View}
     * @param topMargin Top Margin
     * @return {@link ViewHelper}
     */
    public ViewHelper setMarginTop(final View view, final int topMargin) {
        ViewUtils.setMarginTop(view, topMargin);
        return this;
    }

    /**
     * 設置 View Top Margin
     * @param view      {@link View}
     * @param topMargin Top Margin
     * @param reset     是否重置清空其他 margin
     * @return {@link ViewHelper}
     */
    public ViewHelper setMarginTop(final View view, final int topMargin, final boolean reset) {
        ViewUtils.setMarginTop(view, topMargin, reset);
        return this;
    }

    /**
     * 設置 View Right Margin
     * @param view        {@link View}
     * @param rightMargin Right Margin
     * @return {@link ViewHelper}
     */
    public ViewHelper setMarginRight(final View view, final int rightMargin) {
        ViewUtils.setMarginRight(view, rightMargin);
        return this;
    }

    /**
     * 設置 View Right Margin
     * @param view        {@link View}
     * @param rightMargin Right Margin
     * @param reset       是否重置清空其他 margin
     * @return {@link ViewHelper}
     */
    public ViewHelper setMarginRight(final View view, final int rightMargin, final boolean reset) {
        ViewUtils.setMarginRight(view, rightMargin, reset);
        return this;
    }

    /**
     * 設置 View Bottom Margin
     * @param view         {@link View}
     * @param bottomMargin Bottom Margin
     * @return {@link ViewHelper}
     */
    public ViewHelper setMarginBottom(final View view, final int bottomMargin) {
        ViewUtils.setMarginBottom(view, bottomMargin);
        return this;
    }

    /**
     * 設置 View Bottom Margin
     * @param view         {@link View}
     * @param bottomMargin Bottom Margin
     * @param reset        是否重置清空其他 margin
     * @return {@link ViewHelper}
     */
    public ViewHelper setMarginBottom(final View view, final int bottomMargin, final boolean reset) {
        ViewUtils.setMarginBottom(view, bottomMargin, reset);
        return this;
    }

    /**
     * 設置 Margin 邊距
     * @param view      {@link View}
     * @param leftRight Left and Right Margin
     * @param topBottom Top and bottom Margin
     * @return {@link ViewHelper}
     */
    public ViewHelper setMargin(final View view, final int leftRight, final int topBottom) {
        ViewUtils.setMargin(view, leftRight, topBottom);
        return this;
    }

    /**
     * 設置 Margin 邊距
     * @param view   {@link View}
     * @param margin Margin
     * @return {@link ViewHelper}
     */
    public ViewHelper setMargin(final View view, final int margin) {
        ViewUtils.setMargin(view, margin);
        return this;
    }

    /**
     * 設置 Margin 邊距
     * @param view   {@link View}
     * @param left   Left Margin
     * @param top    Top Margin
     * @param right  Right Margin
     * @param bottom Bottom Margin
     * @return {@link ViewHelper}
     */
    public ViewHelper setMargin(final View view, final int left, final int top, final int right, final int bottom) {
        ViewUtils.setMargin(view, left, top, right, bottom);
        return this;
    }

    /**
     * 設置 Margin 邊距
     * @param views     View[]
     * @param leftRight Left and Right Margin
     * @param topBottom Top and bottom Margin
     * @return {@link ViewHelper}
     */
    public ViewHelper setMargin(final View[] views, final int leftRight, final int topBottom) {
        ViewUtils.setMargin(views, leftRight, topBottom);
        return this;
    }

    /**
     * 設置 Margin 邊距
     * @param views  View[]
     * @param margin Margin
     * @return {@link ViewHelper}
     */
    public ViewHelper setMargin(final View[] views, final int margin) {
        ViewUtils.setMargin(views, margin);
        return this;
    }

    /**
     * 設置 Margin 邊距
     * @param views  View[]
     * @param left   Left Margin
     * @param top    Top Margin
     * @param right  Right Margin
     * @param bottom Bottom Margin
     * @return {@link ViewHelper}
     */
    public ViewHelper setMargin(final View[] views, final int left, final int top, final int right, final int bottom) {
        ViewUtils.setMargin(views, left, top, right, bottom);
        return this;
    }

    /**
     * 設置 View Left Padding
     * @param view        {@link View}
     * @param leftPadding Left Padding
     * @return {@link ViewHelper}
     */
    public ViewHelper setPaddingLeft(final View view, final int leftPadding) {
        ViewUtils.setPaddingLeft(view, leftPadding);
        return this;
    }

    /**
     * 設置 View Left Padding
     * @param view        {@link View}
     * @param leftPadding Left Padding
     * @param reset       是否重置清空其他 Padding
     * @return {@link ViewHelper}
     */
    public ViewHelper setPaddingLeft(final View view, final int leftPadding, final boolean reset) {
        ViewUtils.setPaddingLeft(view, leftPadding, reset);
        return this;
    }

    /**
     * 設置 View Top Padding
     * @param view       {@link View}
     * @param topPadding Top Padding
     * @return {@link ViewHelper}
     */
    public ViewHelper setPaddingTop(final View view, final int topPadding) {
        ViewUtils.setPaddingTop(view, topPadding);
        return this;
    }

    /**
     * 設置 View Top Padding
     * @param view       {@link View}
     * @param topPadding Top Padding
     * @param reset      是否重置清空其他 Padding
     * @return {@link ViewHelper}
     */
    public ViewHelper setPaddingTop(final View view, final int topPadding, final boolean reset) {
        ViewUtils.setPaddingTop(view, topPadding, reset);
        return this;
    }

    /**
     * 設置 View Right Padding
     * @param view         {@link View}
     * @param rightPadding Right Padding
     * @return {@link ViewHelper}
     */
    public ViewHelper setPaddingRight(final View view, final int rightPadding) {
        ViewUtils.setPaddingRight(view, rightPadding);
        return this;
    }

    /**
     * 設置 View Right Padding
     * @param view         {@link View}
     * @param rightPadding Right Padding
     * @param reset        是否重置清空其他 Padding
     * @return {@link ViewHelper}
     */
    public ViewHelper setPaddingRight(final View view, final int rightPadding, final boolean reset) {
        ViewUtils.setPaddingRight(view, rightPadding, reset);
        return this;
    }

    /**
     * 設置 View Bottom Padding
     * @param view          {@link View}
     * @param bottomPadding Bottom Padding
     * @return {@link ViewHelper}
     */
    public ViewHelper setPaddingBottom(final View view, final int bottomPadding) {
        ViewUtils.setPaddingBottom(view, bottomPadding);
        return this;
    }

    /**
     * 設置 View Bottom Padding
     * @param view          {@link View}
     * @param bottomPadding Bottom Padding
     * @param reset         是否重置清空其他 Padding
     * @return {@link ViewHelper}
     */
    public ViewHelper setPaddingBottom(final View view, final int bottomPadding, final boolean reset) {
        ViewUtils.setPaddingBottom(view, bottomPadding, reset);
        return this;
    }

    /**
     * 設置 Padding 邊距
     * @param view      {@link View}
     * @param leftRight Left and Right Padding
     * @param topBottom Top and bottom Padding
     * @return {@link ViewHelper}
     */
    public ViewHelper setPadding(final View view, final int leftRight, final int topBottom) {
        ViewUtils.setPadding(view, leftRight, topBottom);
        return this;
    }

    /**
     * 設置 Padding 邊距
     * @param view    {@link View}
     * @param padding Padding
     * @return {@link ViewHelper}
     */
    public ViewHelper setPadding(final View view, final int padding) {
        ViewUtils.setPadding(view, padding);
        return this;
    }

    /**
     * 設置 Padding 邊距
     * @param view   {@link View}
     * @param left   Left Padding
     * @param top    Top Padding
     * @param right  Right Padding
     * @param bottom Bottom Padding
     * @return {@link ViewHelper}
     */
    public ViewHelper setPadding(final View view, final int left, final int top, final int right, final int bottom) {
        ViewUtils.setPadding(view, left, top, right, bottom);
        return this;
    }

    /**
     * 設置 Padding 邊距
     * @param views     View[]
     * @param leftRight Left and Right Padding
     * @param topBottom Top and bottom Padding
     * @return {@link ViewHelper}
     */
    public ViewHelper setPadding(final View[] views, final int leftRight, final int topBottom) {
        ViewUtils.setPadding(views, leftRight, topBottom);
        return this;
    }

    /**
     * 設置 Padding 邊距
     * @param views   View[]
     * @param padding Padding
     * @return {@link ViewHelper}
     */
    public ViewHelper setPadding(final View[] views, final int padding) {
        ViewUtils.setPadding(views, padding);
        return this;
    }

    /**
     * 設置 Padding 邊距
     * @param views  View[]
     * @param left   Left Padding
     * @param top    Top Padding
     * @param right  Right Padding
     * @param bottom Bottom Padding
     * @return {@link ViewHelper}
     */
    public ViewHelper setPadding(final View[] views, final int left, final int top, final int right, final int bottom) {
        ViewUtils.setPadding(views, left, top, right, bottom);
        return this;
    }

    /**
     * 設置 Left CompoundDrawables
     * @param textView {@link TextView}
     * @param left     left Drawable
     * @return {@link ViewHelper}
     */
    public ViewHelper setCompoundDrawablesByLeft(final TextView textView, final Drawable left) {
        ViewUtils.setCompoundDrawablesByLeft(textView, left);
        return this;
    }

    /**
     * 設置 Top CompoundDrawables
     * @param textView {@link TextView}
     * @param top      top Drawable
     * @return {@link ViewHelper}
     */
    public ViewHelper setCompoundDrawablesByTop(final TextView textView, final Drawable top) {
        ViewUtils.setCompoundDrawablesByTop(textView, top);
        return this;
    }

    /**
     * 設置 Right CompoundDrawables
     * @param textView {@link TextView}
     * @param right    right Drawable
     * @return {@link ViewHelper}
     */
    public ViewHelper setCompoundDrawablesByRight(final TextView textView, final Drawable right) {
        ViewUtils.setCompoundDrawablesByRight(textView, right);
        return this;
    }

    /**
     * 設置 Bottom CompoundDrawables
     * @param textView {@link TextView}
     * @param bottom   bottom Drawable
     * @return {@link ViewHelper}
     */
    public ViewHelper setCompoundDrawablesByBottom(final TextView textView, final Drawable bottom) {
        ViewUtils.setCompoundDrawablesByBottom(textView, bottom);
        return this;
    }

    /**
     * 設置 CompoundDrawables
     * <pre>
     *     CompoundDrawable 的大小控制是通過 drawable.setBounds() 控制
     *     需要先設置 Drawable 的 setBounds
     * </pre>
     * @param textView {@link TextView}
     * @param left     left Drawable
     * @param top      top Drawable
     * @param right    right Drawable
     * @param bottom   bottom Drawable
     * @return {@link ViewHelper}
     */
    public ViewHelper setCompoundDrawables(final TextView textView,
                                           final Drawable left, final Drawable top,
                                           final Drawable right, final Drawable bottom) {
        ViewUtils.setCompoundDrawables(textView, left, top, right, bottom);
        return this;
    }

    /**
     * 設置 Left CompoundDrawables - 按照原有比例大小顯示圖片
     * @param textView {@link TextView}
     * @param left     left Drawable
     * @return {@link ViewHelper}
     */
    public ViewHelper setCompoundDrawablesWithIntrinsicBoundsByLeft(final TextView textView, final Drawable left) {
        ViewUtils.setCompoundDrawablesWithIntrinsicBoundsByLeft(textView, left);
        return this;
    }

    /**
     * 設置 Top CompoundDrawables - 按照原有比例大小顯示圖片
     * @param textView {@link TextView}
     * @param top      top Drawable
     * @return {@link ViewHelper}
     */
    public ViewHelper setCompoundDrawablesWithIntrinsicBoundsByTop(final TextView textView, final Drawable top) {
        ViewUtils.setCompoundDrawablesWithIntrinsicBoundsByTop(textView, top);
        return this;
    }

    /**
     * 設置 Right CompoundDrawables - 按照原有比例大小顯示圖片
     * @param textView {@link TextView}
     * @param right    right Drawable
     * @return {@link ViewHelper}
     */
    public ViewHelper setCompoundDrawablesWithIntrinsicBoundsByRight(final TextView textView, final Drawable right) {
        ViewUtils.setCompoundDrawablesWithIntrinsicBoundsByRight(textView, right);
        return this;
    }

    /**
     * 設置 Bottom CompoundDrawables - 按照原有比例大小顯示圖片
     * @param textView {@link TextView}
     * @param bottom   bottom Drawable
     * @return {@link ViewHelper}
     */
    public ViewHelper setCompoundDrawablesWithIntrinsicBoundsByBottom(final TextView textView, final Drawable bottom) {
        ViewUtils.setCompoundDrawablesWithIntrinsicBoundsByBottom(textView, bottom);
        return this;
    }

    /**
     * 設置 CompoundDrawables - 按照原有比例大小顯示圖片
     * @param textView {@link TextView}
     * @param left     left Drawable
     * @param top      top Drawable
     * @param right    right Drawable
     * @param bottom   bottom Drawable
     * @return {@link ViewHelper}
     */
    public ViewHelper setCompoundDrawablesWithIntrinsicBounds(final TextView textView,
                                                              final Drawable left, final Drawable top,
                                                              final Drawable right, final Drawable bottom) {
        ViewUtils.setCompoundDrawablesWithIntrinsicBounds(textView, left, top, right, bottom);
        return this;
    }

    // ==================
    // = RelativeLayout =
    // ==================

    /**
     * 設置 RelativeLayout View 佈局規則
     * @param view {@link View}
     * @param verb 佈局位置
     * @return {@link ViewHelper}
     */
    public ViewHelper addRule(final View view, final int verb) {
        ViewUtils.addRule(view, verb);
        return this;
    }

    /**
     * 設置 RelativeLayout View 佈局規則
     * @param view    {@link View}
     * @param verb    佈局位置
     * @param subject 關聯 View id
     * @return {@link ViewHelper}
     */
    public ViewHelper addRule(final View view, final int verb, final int subject) {
        ViewUtils.addRule(view, verb, subject);
        return this;
    }

    /**
     * 移除 RelativeLayout View 佈局規則
     * @param view {@link View}
     * @param verb 佈局位置
     * @return {@link ViewHelper}
     */
    public ViewHelper removeRule(final View view, final int verb) {
        ViewUtils.removeRule(view, verb);
        return this;
    }

    // =

    /**
     * 設置多個 RelativeLayout View 佈局規則
     * @param verb  佈局位置
     * @param views View[]
     * @return {@link ViewHelper}
     */
    public ViewHelper addRules(final int verb, final View... views) {
        ViewUtils.addRules(verb, views);
        return this;
    }

    /**
     * 設置多個 RelativeLayout View 佈局規則
     * @param verb    佈局位置
     * @param subject 關聯 View id
     * @param views   View[]
     * @return {@link ViewHelper}
     */
    public ViewHelper addRules(final int verb, final int subject, final View... views) {
        ViewUtils.addRules(verb, subject, views);
        return this;
    }

    /**
     * 移除多個 RelativeLayout View 佈局規則
     * @param verb  佈局位置
     * @param views View[]
     * @return {@link ViewHelper}
     */
    public ViewHelper removeRules(final int verb, final View... views) {
        ViewUtils.removeRules(verb, views);
        return this;
    }

    // =============
    // = Animation =
    // =============

    /**
     * 設置動畫
     * @param view      {@link View}
     * @param animation {@link Animation}
     * @return {@link ViewHelper}
     */
    public ViewHelper setAnimation(final View view, final Animation animation) {
        ViewUtils.setAnimation(view, animation);
        return this;
    }

    /**
     * 清空動畫
     * @param view {@link View}
     * @return {@link ViewHelper}
     */
    public ViewHelper clearAnimation(final View view) {
        ViewUtils.clearAnimation(view);
        return this;
    }

    /**
     * 啓動動畫
     * @param view      {@link View}
     * @param animation {@link Animation}
     * @return {@link ViewHelper}
     */
    public ViewHelper startAnimation(final View view, final Animation animation) {
        ViewUtils.startAnimation(view, animation);
        return this;
    }

    // ============
    // = Listener =
    // ============

    /**
     * 設置點擊事件
     * @param onClickListener {@link View.OnClickListener}
     * @param views           View 數組
     * @return {@link ViewHelper}
     */
    public ViewHelper setOnClicks(final View.OnClickListener onClickListener, final View... views) {
        ListenerUtils.setOnClicks(onClickListener, views);
        return this;
    }

    /**
     * 設置長按事件
     * @param onLongClickListener {@link View.OnLongClickListener}
     * @param views               View 數組
     * @return {@link ViewHelper}
     */
    public ViewHelper setOnLongClicks(final View.OnLongClickListener onLongClickListener, final View... views) {
        ListenerUtils.setOnLongClicks(onLongClickListener, views);
        return this;
    }

    /**
     * 增加控件的觸摸範圍, 最大範圍只能是父佈局所包含的的區域
     * @param view  待添加點擊範圍 View
     * @param range 點擊範圍
     * @return {@link ViewHelper}
     */
    public ViewHelper addTouchArea(final View view, final int range) {
        ClickUtils.addTouchArea(view, range);
        return this;
    }

    /**
     * 增加控件的觸摸範圍, 最大範圍只能是父佈局所包含的的區域
     * @param view   待添加點擊範圍 View
     * @param top    top range
     * @param bottom bottom range
     * @param left   left range
     * @param right  right range
     * @return {@link ViewHelper}
     */
    public ViewHelper addTouchArea(final View view, final int top, final int bottom, final int left, final int right) {
        ClickUtils.addTouchArea(view, top, bottom, left, right);
        return this;
    }

    // =================
    // = ListViewUtils =
    // =================

    /**
     * 滑動到指定索引 ( 有滾動過程 )
     * @param view     {@link View}
     * @param position 索引
     * @return {@link ViewHelper}
     */
    public ViewHelper smoothScrollToPosition(final View view, final int position) {
        ListViewUtils.smoothScrollToPosition(view, position);
        return this;
    }

    /**
     * 滑動到指定索引 ( 無滾動過程 )
     * @param view     {@link View}
     * @param position 索引
     * @return {@link ViewHelper}
     */
    public ViewHelper scrollToPosition(final View view, final int position) {
        ListViewUtils.scrollToPosition(view, position);
        return this;
    }

    // ==============
    // = 滑動到頂部 =
    // ==============

    /**
     * 滑動到頂部 ( 有滾動過程 )
     * @param view {@link View}
     * @return {@link ViewHelper}
     */
    public ViewHelper smoothScrollToTop(final View view) {
        ListViewUtils.smoothScrollToTop(view);
        return this;
    }

    /**
     * 滑動到頂部 ( 無滾動過程 )
     * @param view {@link View}
     * @return {@link ViewHelper}
     */
    public ViewHelper scrollToTop(final View view) {
        ListViewUtils.scrollToTop(view);
        return this;
    }

    // ==============
    // = 滑動到底部 =
    // ==============

    /**
     * 滑動到底部 ( 有滾動過程 )
     * <pre>
     *     如果未到達底部 ( position 可以再加上 smoothScrollBy 搭配到底部 )
     *     smoothScrollToBottom(view)
     *     smoothScrollBy(view, 0, Integer.MAX_VALUE);
     * </pre>
     * @param view {@link View}
     * @return {@link ViewHelper}
     */
    public ViewHelper smoothScrollToBottom(final View view) {
        ListViewUtils.smoothScrollToBottom(view);
        return this;
    }

    /**
     * 滑動到底部 ( 無滾動過程 )
     * <pre>
     *     如果未到達底部 ( position 可以再加上 scrollBy 搭配到底部 )
     *     scrollToBottom(view)
     *     scrollBy(view, 0, Integer.MAX_VALUE);
     * </pre>
     * @param view {@link View}
     * @return {@link ViewHelper}
     */
    public ViewHelper scrollToBottom(final View view) {
        ListViewUtils.scrollToBottom(view);
        return this;
    }

    // ==============
    // = ScrollView =
    // ==============

    /**
     * 滾動到指定位置 ( 有滾動過程 ) - 相對於初始位置移動
     * @param view {@link View}
     * @param x    X 軸開始座標
     * @param y    Y 軸開始座標
     * @return {@link ViewHelper}
     */
    public ViewHelper smoothScrollTo(final View view, final int x, final int y) {
        ListViewUtils.smoothScrollTo(view, x, y);
        return this;
    }

    /**
     * 滾動到指定位置 ( 有滾動過程 ) - 相對於上次移動的最後位置移動
     * @param view {@link View}
     * @param x    X 軸開始座標
     * @param y    Y 軸開始座標
     * @return {@link ViewHelper}
     */
    public ViewHelper smoothScrollBy(final View view, final int x, final int y) {
        ListViewUtils.smoothScrollBy(view, x, y);
        return this;
    }

    /**
     * 滾動方向 ( 有滾動過程 )
     * @param view      {@link View}
     * @param direction 滾動方向 如: View.FOCUS_UP、View.FOCUS_DOWN
     * @return {@link ViewHelper}
     */
    public ViewHelper fullScroll(final View view, final int direction) {
        ListViewUtils.fullScroll(view, direction);
        return this;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章