万能的TextView,实现常用布局样式

package com.loaderman.textviewdemo;

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.drawable.Drawable;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.View;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;

/**
 * 通用的textView可以实现大部分常用布局样式
 */

public class CommonTextView extends RelativeLayout {

    private Context mContext;

    private int defaultColor = 0xFF373737;//文字默认颜色
    private int defaultDividerLineColor = 0xFFE8E8E8;//分割线默认颜色
    private int defaultSize;//默认字体大小
    private int defaultPadding;//默认边距

    private int mBackgroundColor = 0xffffffff;//背景颜色


    private Drawable mLeft_drawableLeft;
    private Drawable mLeft_drawableTop;
    private Drawable mLeft_drawableRight;
    private Drawable mLeft_drawableBottom;

    private Drawable mCenter_drawableLeft;
    private Drawable mCenter_drawableTop;
    private Drawable mCenter_drawableRight;
    private Drawable mCenter_drawableBottom;

    private Drawable mRight_drawableLeft;
    private Drawable mRight_drawableTop;
    private Drawable mRight_drawableRight;
    private Drawable mRight_drawableBottom;


    private Drawable mLeft_IV_drawable;
//    private Drawable mRight_IV_drawable;


    private CharSequence mLeftTextString;
    private CharSequence mLeftTopTextString;
    private CharSequence mLeftBottomTextString;

    private CharSequence mRightTextString;
    private CharSequence mRightTopTextString;
    private CharSequence mRightBottomTextString;

    private CharSequence mCenterTextString;
    private CharSequence mCenterTopTextString;
    private CharSequence mCenterBottomTextString;

    private int mLeftTextSize;
    private int mLeftTopTextSize;
    private int mLeftBottomTextSize;

    private int mRightTextSize;
    private int mRightTopTextSize;
    private int mRightBottomTextSize;

    private int mCenterTextSize;
    private int mCenterTopTextSize;
    private int mCenterBottomTextSize;

    private int mLeftTextColor;
    private int mLeftTopTextColor;
    private int mLeftBottomTextColor;

    private int mCenterTextColor;
    private int mCenterTopTextColor;
    private int mCenterBottomTextColor;

    private int mRightTextColor;
    private int mRightTopTextColor;
    private int mRightBottomTextColor;

    private int mLeftIconDrawablePadding;
    private int mCenterIconDrawablePadding;
    private int mRightIconDrawablePadding;

    private int mLeftViewPaddingLeft;
    private int mLeftViewPaddingRight;

    private int mCenterViewPaddingLeft;
    private int mCenterViewPaddingRight;

    private int mRightViewPaddingLeft;
    private int mRightViewPaddingRight;

    private int mTopDividerLineMarginLR;
    private int mTopDividerLineMarginLeft;
    private int mTopDividerLineMarginRight;

    private int mBottomDividerLineMarginLR;
    private int mBottomDividerLineMarginLeft;
    private int mBottomDividerLineMarginRight;

    private int mBothDividerLineMarginLeft;
    private int mBothDividerLineMarginRight;

    private int mCenterSpaceHeight;

    private int mLeftImageViewMarginLeft;
//    private int mRightImageViewMarginRight;

    private int mDividerLineType;
    private int mDividerLineColor;
    private int mDividerLineHeight;


    private int mLeftTextViewLineSpacingExtra;
    private int mCenterTextViewLineSpacingExtra;
    private int mRightTextViewLineSpacingExtra;

    /**
     * 分割线的类型
     */
    private static final int NONE = 0;
    private static final int TOP = 1;
    private static final int BOTTOM = 2;
    private static final int BOTH = 3;
    private static final int DEFAULT = BOTTOM;

    /**
     * 是否使用点击出现波纹效果
     */
    private boolean useRipple;

    private boolean mSetSingleLine = true;
    private int mSetMaxEms = 10;
    private int mSetLines = 1;

    /**
     * TextView的Gravity
     */
    private static final int Gravity_Left_Center = 0;
    private static final int Gravity_Center = 1;
    private static final int Gravity_Right_Center = 2;

    private static final int DEFAULT_Gravity = 1;

    private int mLeftTextViewGravity;
    private int mCenterTextViewGravity;
    private int mRightTextViewGravity;

    private TextView leftTextView, centerTextView, rightTextView;
    private TextView leftTopTextView, centerTopTextView, rightTopTextView;
    private TextView leftBottomTextView, centerBottomTextView, rightBottomTextView;

    private ImageView leftImageView;
    //    private ImageView rightImageView;
    private View      topLineView, bottomLineView;
    private View centerBaseLineView;

    private boolean mLeftViewIsClickable = false;
    private boolean mCenterViewIsClickable = false;
    private boolean mRightViewIsClickable = false;


    private RelativeLayout.LayoutParams leftTVParams, centerTVParams, rightTVParams, topLineParams, bottomLineParams;
    private RelativeLayout.LayoutParams leftTopTVParams, centerTopTVParams, rightTopTVParams;
    private RelativeLayout.LayoutParams leftBottomTVParams, centerBottomTVParams, rightBottomTVParams;
    private RelativeLayout.LayoutParams centerBaseLineParams;
    private RelativeLayout.LayoutParams leftIVParams;
//    private RelativeLayout.LayoutParams rightIVParams;

    private OnCommonTextViewClickListener onCommonTextViewClickListener;

    private Drawable mBackground_drawable;
    private boolean mIsCenterAlignLeft = false;
    private int mCenterViewMarginLeft;

    public CommonTextView(Context context) {
        this(context, null);
    }

    public CommonTextView(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public CommonTextView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        mContext = context;
        defaultSize = dip2px(context, 13);
        defaultPadding = dip2px(context, 10);
        mCenterSpaceHeight = dip2px(context, 5);
        getAttr(attrs);
        init();
    }

    /**
     * 获取自定义控件资源
     *
     * @param attrs attrs
     */
    private void getAttr(AttributeSet attrs) {
        TypedArray typedArray = mContext.obtainStyledAttributes(attrs, R.styleable.CommonTextView);

        ////////设置文字或者图片资源////////
        mLeft_drawableLeft = typedArray.getDrawable(R.styleable.CommonTextView_cLeftIconResForDrawableLeft);
        mLeft_drawableTop = typedArray.getDrawable(R.styleable.CommonTextView_cLeftIconResForDrawableTop);
        mLeft_drawableRight = typedArray.getDrawable(R.styleable.CommonTextView_cLeftIconResForDrawableRight);
        mLeft_drawableBottom = typedArray.getDrawable(R.styleable.CommonTextView_cLeftIconResForDrawableBottom);

        mCenter_drawableLeft = typedArray.getDrawable(R.styleable.CommonTextView_cCenterIconResForDrawableLeft);
        mCenter_drawableTop = typedArray.getDrawable(R.styleable.CommonTextView_cCenterIconResForDrawableTop);
        mCenter_drawableRight = typedArray.getDrawable(R.styleable.CommonTextView_cCenterIconResForDrawableRight);
        mCenter_drawableBottom = typedArray.getDrawable(R.styleable.CommonTextView_cCenterIconResForDrawableBottom);

        mRight_drawableLeft = typedArray.getDrawable(R.styleable.CommonTextView_cRightIconResForDrawableLeft);
        mRight_drawableTop = typedArray.getDrawable(R.styleable.CommonTextView_cRightIconResForDrawableTop);
        mRight_drawableRight = typedArray.getDrawable(R.styleable.CommonTextView_cRightIconResForDrawableRight);
        mRight_drawableBottom = typedArray.getDrawable(R.styleable.CommonTextView_cRightIconResForDrawableBottom);

        mLeft_IV_drawable = typedArray.getDrawable(R.styleable.CommonTextView_cLeftImageViewDrawableRes);
//        mRight_IV_drawable = typedArray.getDrawable(R.styleable.CommonTextView_cRightImageViewDrawableRes);
        /////////////////////

        mLeftTextString = typedArray.getString(R.styleable.CommonTextView_cLeftTextString);
        mLeftTopTextString = typedArray.getString(R.styleable.CommonTextView_cLeftTopTextString);
        mLeftBottomTextString = typedArray.getString(R.styleable.CommonTextView_cLeftBottomTextString);

        mCenterTextString = typedArray.getString(R.styleable.CommonTextView_cCenterTextString);
        mCenterTopTextString = typedArray.getString(R.styleable.CommonTextView_cCenterTopTextString);
        mCenterBottomTextString = typedArray.getString(R.styleable.CommonTextView_cCenterBottomTextString);

        mRightTextString = typedArray.getString(R.styleable.CommonTextView_cRightTextString);
        mRightTopTextString = typedArray.getString(R.styleable.CommonTextView_cRightTopTextString);
        mRightBottomTextString = typedArray.getString(R.styleable.CommonTextView_cRightBottomTextString);

        mLeftTextColor = typedArray.getColor(R.styleable.CommonTextView_cLeftTextColor, defaultColor);
        mLeftTopTextColor = typedArray.getColor(R.styleable.CommonTextView_cLeftTopTextColor, defaultColor);
        mLeftBottomTextColor = typedArray.getColor(R.styleable.CommonTextView_cLeftBottomTextColor, defaultColor);

        mCenterTextColor = typedArray.getColor(R.styleable.CommonTextView_cCenterTextColor, defaultColor);
        mCenterTopTextColor = typedArray.getColor(R.styleable.CommonTextView_cCenterTopTextColor, defaultColor);
        mCenterBottomTextColor = typedArray.getColor(R.styleable.CommonTextView_cCenterBottomTextColor, defaultColor);

        mRightTextColor = typedArray.getColor(R.styleable.CommonTextView_cRightTextColor, defaultColor);
        mRightTopTextColor = typedArray.getColor(R.styleable.CommonTextView_cRightTopTextColor, defaultColor);
        mRightBottomTextColor = typedArray.getColor(R.styleable.CommonTextView_cRightBottomTextColor, defaultColor);

        mLeftTextSize = typedArray.getDimensionPixelSize(R.styleable.CommonTextView_cLeftTextSize, defaultSize);
        mLeftTopTextSize = typedArray.getDimensionPixelSize(R.styleable.CommonTextView_cLeftTopTextSize, defaultSize);
        mLeftBottomTextSize = typedArray.getDimensionPixelSize(R.styleable.CommonTextView_cLeftBottomTextSize, defaultSize);

        mCenterTextSize = typedArray.getDimensionPixelSize(R.styleable.CommonTextView_cCenterTextSize, defaultSize);
        mCenterTopTextSize = typedArray.getDimensionPixelSize(R.styleable.CommonTextView_cCenterTopTextSize, defaultSize);
        mCenterBottomTextSize = typedArray.getDimensionPixelSize(R.styleable.CommonTextView_cCenterBottomTextSize, defaultSize);

        mRightTextSize = typedArray.getDimensionPixelSize(R.styleable.CommonTextView_cRightTextSize, defaultSize);
        mRightTopTextSize = typedArray.getDimensionPixelSize(R.styleable.CommonTextView_cRightTopTextSize, defaultSize);
        mRightBottomTextSize = typedArray.getDimensionPixelSize(R.styleable.CommonTextView_cRightBottomTextSize, defaultSize);

        mLeftIconDrawablePadding = typedArray.getDimensionPixelSize(R.styleable.CommonTextView_cLeftIconDrawablePadding, defaultPadding);
        mCenterIconDrawablePadding = typedArray.getDimensionPixelSize(R.styleable.CommonTextView_cCenterIconDrawablePadding, defaultPadding);
        mRightIconDrawablePadding = typedArray.getDimensionPixelSize(R.styleable.CommonTextView_cRightIconDrawablePadding, defaultPadding);

        mLeftViewPaddingLeft = typedArray.getDimensionPixelSize(R.styleable.CommonTextView_cLeftViewPaddingLeft, defaultPadding);
        mLeftViewPaddingRight = typedArray.getDimensionPixelSize(R.styleable.CommonTextView_cLeftViewPaddingRight, defaultPadding);
        mCenterViewPaddingLeft = typedArray.getDimensionPixelSize(R.styleable.CommonTextView_cCenterViewPaddingLeft, defaultPadding);
        mCenterViewPaddingRight = typedArray.getDimensionPixelSize(R.styleable.CommonTextView_cCenterViewPaddingRight, defaultPadding);
        mRightViewPaddingLeft = typedArray.getDimensionPixelSize(R.styleable.CommonTextView_cRightViewPaddingLeft, defaultPadding);
        mRightViewPaddingRight = typedArray.getDimensionPixelSize(R.styleable.CommonTextView_cRightViewPaddingRight, defaultPadding);

        mBothDividerLineMarginLeft = typedArray.getDimensionPixelSize(R.styleable.CommonTextView_cBothDividerLineMarginLeft, 0);
        mBothDividerLineMarginRight = typedArray.getDimensionPixelSize(R.styleable.CommonTextView_cBothDividerLineMarginRight, 0);

        mTopDividerLineMarginLR = typedArray.getDimensionPixelSize(R.styleable.CommonTextView_cTopDividerLineMarginLR, 0);
        mTopDividerLineMarginLeft = typedArray.getDimensionPixelSize(R.styleable.CommonTextView_cTopDividerLineMarginLeft, 0);
        mTopDividerLineMarginRight = typedArray.getDimensionPixelSize(R.styleable.CommonTextView_cTopDividerLineMarginRight, 0);

        mBottomDividerLineMarginLR = typedArray.getDimensionPixelSize(R.styleable.CommonTextView_cBottomDividerLineMarginLR, 0);
        mBottomDividerLineMarginLeft = typedArray.getDimensionPixelSize(R.styleable.CommonTextView_cBottomDividerLineMarginLeft, 0);
        mBottomDividerLineMarginRight = typedArray.getDimensionPixelSize(R.styleable.CommonTextView_cBottomDividerLineMarginRight, 0);

        mLeftImageViewMarginLeft = typedArray.getDimensionPixelSize(R.styleable.CommonTextView_cLeftImageViewMarginLeft, defaultPadding);
//        mRightImageViewMarginRight = typedArray.getDimensionPixelSize(R.styleable.CommonTextView_cRightImageViewMarginRight, defaultPadding);

        mCenterSpaceHeight = typedArray.getDimensionPixelSize(R.styleable.CommonTextView_cCenterSpaceHeight, mCenterSpaceHeight);


        mLeftTextViewLineSpacingExtra = typedArray.getDimensionPixelSize(R.styleable.CommonTextView_cLeftTextViewLineSpacingExtra, 0);
        mCenterTextViewLineSpacingExtra = typedArray.getDimensionPixelSize(R.styleable.CommonTextView_cCenterTextViewLineSpacingExtra, 0);
        mRightTextViewLineSpacingExtra = typedArray.getDimensionPixelSize(R.styleable.CommonTextView_cRightTextViewLineSpacingExtra, 0);

        mDividerLineType = typedArray.getInt(R.styleable.CommonTextView_cShowDividerLineType, DEFAULT);
        mDividerLineColor = typedArray.getColor(R.styleable.CommonTextView_cDividerLineColor, defaultDividerLineColor);

        mDividerLineHeight = typedArray.getDimensionPixelSize(R.styleable.CommonTextView_cDividerLineHeight, dip2px(mContext, 0.5f));

        useRipple = typedArray.getBoolean(R.styleable.CommonTextView_cUseRipple, false);

        mBackgroundColor = typedArray.getColor(R.styleable.CommonTextView_cBackgroundColor, mBackgroundColor);

        mSetSingleLine = typedArray.getBoolean(R.styleable.CommonTextView_cSetSingleLine, true);
        mSetMaxEms = typedArray.getInt(R.styleable.CommonTextView_cSetMaxEms, mSetMaxEms);
        mSetLines = typedArray.getInt(R.styleable.CommonTextView_cSetLines, 1);

        mLeftTextViewGravity = typedArray.getInt(R.styleable.CommonTextView_cLeftTextViewGravity, DEFAULT_Gravity);
        mCenterTextViewGravity = typedArray.getInt(R.styleable.CommonTextView_cCenterTextViewGravity, DEFAULT_Gravity);
        mRightTextViewGravity = typedArray.getInt(R.styleable.CommonTextView_cRightTextViewGravity, DEFAULT_Gravity);

        mLeftViewIsClickable = typedArray.getBoolean(R.styleable.CommonTextView_cLeftViewIsClickable, false);
        mCenterViewIsClickable = typedArray.getBoolean(R.styleable.CommonTextView_cCenterViewIsClickable, false);
        mRightViewIsClickable = typedArray.getBoolean(R.styleable.CommonTextView_cRightViewIsClickable, false);

        mBackground_drawable = typedArray.getDrawable(R.styleable.CommonTextView_cBackgroundDrawableRes);

        mIsCenterAlignLeft = typedArray.getBoolean(R.styleable.CommonTextView_cIsCenterAlignLeft, false);
        mCenterViewMarginLeft = typedArray.getDimensionPixelSize(R.styleable.CommonTextView_cCenterViewMarginLeft, dip2px(mContext, 200));

        typedArray.recycle();
    }

    /**
     * 初始化
     */
    private void init() {
        initCommonTextView();
        initLineView();
        initCenterBaseLine();
        if (mLeft_IV_drawable != null) {
            initLeftImageView();
        }
//        if (mRight_IV_drawable!=null){
//            initRightImageView();
//        }
        if (mLeftTextString != null || mLeft_drawableLeft != null || mLeft_drawableRight != null) {
            initLeftText();
        }
        if (mCenterTextString != null) {
            initCenterText();
        }
        if (mRightTextString != null || mRight_drawableLeft != null || mRight_drawableRight != null) {
            initRightText();
        }

        if (mLeftTopTextString != null) {
            initLeftTopText();
        }
        if (mLeftBottomTextString != null) {
            initLeftBottomText();
        }

        if (mCenterTopTextString != null) {
            initCenterTopText();
        }
        if (mCenterBottomTextString != null) {
            initCenterBottomText();
        }
        if (mRightTopTextString != null) {
            initRightTopText();
        }
        if (mRightBottomTextString != null) {
            initRightBottomText();
        }

    }

    /**
     * 初始化commonTextView
     */
    private void initCommonTextView() {
        this.setBackgroundColor(mBackgroundColor);
        if (useRipple) {
            this.setBackgroundResource(R.drawable.selector_white);
        }
        this.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                if (onCommonTextViewClickListener != null) {
                    onCommonTextViewClickListener.onCommonTextViewClick();
                }
            }
        });
        if (mBackground_drawable != null) {
            this.setBackgroundDrawable(mBackground_drawable);
        }
    }

    /**
     * 为了设置上下两排文字居中对齐显示而需要设置的基准线
     */
    private void initCenterBaseLine() {
        if (centerBaseLineView == null) {
            if (centerBaseLineParams == null) {
                centerBaseLineParams = new LayoutParams(LayoutParams.MATCH_PARENT, mCenterSpaceHeight);
                centerBaseLineParams.addRule(RelativeLayout.CENTER_VERTICAL, TRUE);
            }
            centerBaseLineView = new View(mContext);

            centerBaseLineView.setId(R.id.cCenterBaseLineId);
            centerBaseLineView.setLayoutParams(centerBaseLineParams);
        }
        addView(centerBaseLineView);
    }

    /**
     * 初始化分割线
     */
    private void initLineView() {
        switch (mDividerLineType) {
            case NONE:
                break;
            case TOP:
                setTopLineMargin();
                break;
            case BOTTOM:
                setBottomLineMargin();
                break;
            case BOTH:
                setTopLineMargin();
                setBottomLineMargin();
                break;
        }

    }

    /**
     * 设置顶部的分割线
     */
    private void setTopLineMargin() {
        if (mTopDividerLineMarginLR != 0) {
            initTopLineView(mTopDividerLineMarginLR, mTopDividerLineMarginLR);
        } else if (mBothDividerLineMarginLeft != 0 | mBothDividerLineMarginRight != 0) {
            initTopLineView(mBothDividerLineMarginLeft, mBothDividerLineMarginRight);
        } else {
            initTopLineView(mTopDividerLineMarginLeft, mTopDividerLineMarginRight);
        }
    }

    /**
     * 设置底部的分割线
     */
    private void setBottomLineMargin() {
        if (mBottomDividerLineMarginLR != 0) {
            initBottomLineView(mBottomDividerLineMarginLR, mBottomDividerLineMarginLR);
        } else if (mBothDividerLineMarginRight != 0 | mBothDividerLineMarginRight != 0) {
            initBottomLineView(mBothDividerLineMarginLeft, mBothDividerLineMarginRight);
        } else {
            initBottomLineView(mBottomDividerLineMarginLeft, mBottomDividerLineMarginRight);
        }
    }


    /**
     * 设置上边分割线view
     *
     * @param marginLeft  左间距
     * @param marginRight 右间距
     */
    private void initTopLineView(int marginLeft, int marginRight) {
        if (topLineView == null) {
            if (topLineParams == null) {
                topLineParams = new LayoutParams(LayoutParams.MATCH_PARENT, mDividerLineHeight);
            }
            topLineParams.addRule(ALIGN_PARENT_TOP, TRUE);
            topLineParams.setMargins(marginLeft, 0, marginRight, 0);
            topLineView = new View(mContext);
            topLineView.setLayoutParams(topLineParams);
            topLineView.setBackgroundColor(mDividerLineColor);
        }
        addView(topLineView);
    }

    /**
     * 设置底部分割线view
     *
     * @param marginLeft  左间距
     * @param marginRight 右间距
     */
    private void initBottomLineView(int marginLeft, int marginRight) {
        if (bottomLineView == null) {
            if (bottomLineParams == null) {
                bottomLineParams = new LayoutParams(LayoutParams.MATCH_PARENT, mDividerLineHeight);
            }
            bottomLineParams.addRule(ALIGN_PARENT_BOTTOM, TRUE);
            bottomLineParams.setMargins(marginLeft, 0, marginRight, 0);

            bottomLineView = new View(mContext);
            bottomLineView.setLayoutParams(bottomLineParams);
            bottomLineView.setBackgroundColor(mDividerLineColor);
        }
        addView(bottomLineView);
    }

    /**
     * 初始化左边ImageView
     * 主要是为了便于使用第三方图片框架获取网络图片使用
     */
    private void initLeftImageView() {
        leftImageView = new ImageView(mContext);
        leftIVParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        leftIVParams.addRule(ALIGN_PARENT_LEFT, TRUE);
        leftIVParams.addRule(RelativeLayout.CENTER_VERTICAL, TRUE);
        leftIVParams.setMargins(mLeftImageViewMarginLeft, 0, 0, 0);
        leftImageView.setScaleType(ImageView.ScaleType.CENTER);
        leftImageView.setId(R.id.cLeftImageViewId);
        leftImageView.setLayoutParams(leftIVParams);
        if (mLeft_IV_drawable != null) {
            leftImageView.setImageDrawable(mLeft_IV_drawable);
        }
        addView(leftImageView);
    }

    /**
     * 初始化右边ImageView
     * 主要是为了便于使用第三方图片框架获取网络图片使用
     */
//    private void initRightImageView() {
//        rightImageView = new ImageView(mContext);
//        rightIVParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
//        rightIVParams.addRule(ALIGN_PARENT_RIGHT, TRUE);
//        rightIVParams.addRule(RelativeLayout.CENTER_VERTICAL, TRUE);
//        rightIVParams.setMargins(0, 0, mRightImageViewMarginRight, 0);
//        rightImageView.setScaleType(ImageView.ScaleType.CENTER);
//        rightImageView.setId(R.id.cRightImageViewId);
//        rightImageView.setLayoutParams(rightIVParams);
//        if (mRight_IV_drawable != null) {
//            rightImageView.setImageDrawable(mRight_IV_drawable);
//        }
//        addView(rightImageView);
//    }

    /**
     * 初始化左边textView
     */
    private void initLeftText() {
        if (leftTextView == null) {
            if (leftTVParams == null) {
                leftTVParams = getParams(leftTVParams);
            }
            leftTVParams.addRule(CENTER_VERTICAL, TRUE);
            leftTVParams.addRule(RIGHT_OF, R.id.cLeftImageViewId);
            leftTVParams.setMargins(mLeftViewPaddingLeft, 0, mLeftViewPaddingRight, 0);
            leftTextView = initText(leftTextView, leftTVParams, R.id.cLeftTextId, mLeftTextColor, mLeftTextSize);
            leftTextView.setText(mLeftTextString);
            leftTextView.setLineSpacing(mLeftTextViewLineSpacingExtra, 1.0f);
            setTextViewGravity(leftTextView, mLeftTextViewGravity);
            if (mLeftViewIsClickable) {
                leftTextView.setOnClickListener(new OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        if (onCommonTextViewClickListener != null) {
                            onCommonTextViewClickListener.onLeftViewClick();
                        }
                    }
                });
            }
        }

        setDrawable(leftTextView, mLeft_drawableLeft, mLeft_drawableTop, mLeft_drawableRight, mLeft_drawableBottom, mLeftIconDrawablePadding);

    }

    /**
     * 初始化左上textView
     */
    private void initLeftTopText() {
        if (leftTopTextView == null) {
            if (leftTopTVParams == null) {
                leftTopTVParams = getParams(leftTopTVParams);
            }
            leftTopTVParams.addRule(RelativeLayout.CENTER_VERTICAL, TRUE);
            leftTopTVParams.addRule(ABOVE, R.id.cCenterBaseLineId);
            leftTopTVParams.addRule(RIGHT_OF, R.id.cLeftImageViewId);
            leftTopTVParams.setMargins(mLeftViewPaddingLeft, 0, mLeftViewPaddingRight, 0);
            leftTopTextView = initText(leftTopTextView, leftTopTVParams, R.id.cLeftTopTextId, mLeftTopTextColor, mLeftTopTextSize);
            leftTopTextView.setText(mLeftTopTextString);
            setTextViewGravity(leftTopTextView, mLeftTextViewGravity);

        }

    }

    /**
     * 初始化左下textView
     */
    private void initLeftBottomText() {
        if (leftBottomTextView == null) {
            if (leftBottomTVParams == null) {
                leftBottomTVParams = getParams(leftBottomTVParams);
            }
            leftBottomTVParams.addRule(RelativeLayout.CENTER_VERTICAL, TRUE);
            leftBottomTVParams.addRule(BELOW, R.id.cCenterBaseLineId);
            leftBottomTVParams.addRule(RIGHT_OF, R.id.cLeftImageViewId);
            leftBottomTVParams.setMargins(mLeftViewPaddingLeft, 0, mLeftViewPaddingRight, 0);
            leftBottomTextView = initText(leftBottomTextView, leftBottomTVParams, R.id.cLeftBottomTextId, mLeftBottomTextColor, mLeftBottomTextSize);
            leftBottomTextView.setText(mLeftBottomTextString);
            setTextViewGravity(leftBottomTextView, mLeftTextViewGravity);

        }

    }

    /**
     * 初始化中间textView
     */
    private void initCenterText() {
        if (centerTextView == null) {
            if (centerTVParams == null) {
                if (mIsCenterAlignLeft) {
                    centerTVParams = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
                } else {
                    centerTVParams = getParams(centerTVParams);
                }
            }

            centerTVParams.addRule(RelativeLayout.CENTER_VERTICAL, TRUE);
            centerTVParams.addRule(RelativeLayout.CENTER_IN_PARENT, TRUE);

            if (mIsCenterAlignLeft) {
                centerTextView = initText(centerTextView, centerTVParams, R.id.cCenterTextId, mCenterTextColor, mCenterTextSize);
                centerTVParams.setMargins(mCenterViewMarginLeft, 0, mCenterViewPaddingRight, 0);
                setTextViewGravity(centerTextView, Gravity_Left_Center);
            } else {
                centerTextView = initText(centerTextView, centerTVParams, R.id.cCenterTextId, mCenterTextColor, mCenterTextSize);
                centerTVParams.setMargins(mCenterViewPaddingLeft, 0, mCenterViewPaddingRight, 0);
                setTextViewGravity(centerTextView, mCenterTextViewGravity);
            }

            centerTextView.setText(mCenterTextString);
            centerTextView.setLineSpacing(mCenterTextViewLineSpacingExtra, 1.0f);

            if (mCenterViewIsClickable) {
                centerTextView.setOnClickListener(new OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        if (onCommonTextViewClickListener != null) {
                            onCommonTextViewClickListener.onCenterViewClick();
                        }
                    }
                });
            }

        }
        setDrawable(centerTextView, mCenter_drawableLeft, mCenter_drawableTop, mCenter_drawableRight, mCenter_drawableBottom, mCenterIconDrawablePadding);

    }

    /**
     * 初始化中上textView
     */
    private void initCenterTopText() {
        if (centerTopTextView == null) {
            if (centerTopTVParams == null) {
                centerTopTVParams = getParams(centerTopTVParams);
            }
            centerTopTVParams.addRule(RelativeLayout.CENTER_VERTICAL, TRUE);
            centerTopTVParams.addRule(RelativeLayout.CENTER_IN_PARENT, TRUE);
            centerTopTVParams.addRule(ABOVE, R.id.cCenterBaseLineId);
            centerTopTVParams.setMargins(mCenterViewPaddingLeft, 0, mCenterViewPaddingRight, 0);
            centerTopTextView = initText(centerTopTextView, centerTopTVParams, R.id.cCenterTopTextId, mCenterTopTextColor, mCenterTopTextSize);
            centerTopTextView.setText(mCenterTopTextString);
            centerTopTextView.setLineSpacing(mCenterTextViewLineSpacingExtra, 1.0f);
            setTextViewGravity(centerTopTextView, mCenterTextViewGravity);
        }

    }

    /**
     * 初始化中下textView
     */
    private void initCenterBottomText() {
        if (centerBottomTextView == null) {
            if (centerBottomTVParams == null) {
                centerBottomTVParams = getParams(centerBottomTVParams);
            }
            centerBottomTVParams.addRule(RelativeLayout.CENTER_VERTICAL, TRUE);
            centerBottomTVParams.addRule(RelativeLayout.CENTER_IN_PARENT, TRUE);
            centerBottomTVParams.addRule(BELOW, R.id.cCenterBaseLineId);
            centerBottomTVParams.setMargins(mCenterViewPaddingLeft, 0, mCenterViewPaddingRight, 0);
            centerBottomTextView = initText(centerBottomTextView, centerBottomTVParams, R.id.cCenterBottomTextId, mCenterBottomTextColor, mCenterBottomTextSize);
            centerBottomTextView.setText(mCenterBottomTextString);
            centerBottomTextView.setLineSpacing(mCenterTextViewLineSpacingExtra, 1.0f);
            setTextViewGravity(centerBottomTextView, mCenterTextViewGravity);
        }

    }


    /**
     * 初始化右边textView
     */
    private void initRightText() {
        if (rightTextView == null) {
            if (rightTVParams == null) {
                rightTVParams = getParams(rightTVParams);
            }

            rightTVParams.addRule(RelativeLayout.CENTER_VERTICAL, TRUE);
            rightTVParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, TRUE);
            rightTVParams.addRule(RelativeLayout.LEFT_OF, R.id.cRightImageViewId);
            rightTVParams.setMargins(mRightViewPaddingLeft, 0, mRightViewPaddingRight, 0);
            rightTextView = initText(rightTextView, rightTVParams, R.id.cRightTextId, mRightTextColor, mRightTextSize);
            rightTextView.setText(mRightTextString);
//            rightTextView.setGravity(Gravity.CENTER_VERTICAL | Gravity.RIGHT);
            rightTextView.setLineSpacing(mRightTextViewLineSpacingExtra, 1.0f);
            setTextViewGravity(rightTextView, mRightTextViewGravity);
            if (mRightViewIsClickable) {
                rightTextView.setOnClickListener(new OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        if (onCommonTextViewClickListener != null) {
                            onCommonTextViewClickListener.onRightViewClick();
                        }
                    }
                });
            }

        }
        setDrawable(rightTextView, mRight_drawableLeft, mRight_drawableTop, mRight_drawableRight, mRight_drawableBottom, mRightIconDrawablePadding);

    }

    /**
     * 初始化右上textView
     */
    private void initRightTopText() {
        if (rightTopTextView == null) {
            if (rightTopTVParams == null) {
                rightTopTVParams = getParams(rightTopTVParams);
            }
            rightTopTVParams.addRule(RelativeLayout.CENTER_VERTICAL, TRUE);
            rightTopTVParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, TRUE);
            rightTopTVParams.addRule(ABOVE, R.id.cCenterBaseLineId);
            rightTopTVParams.addRule(RelativeLayout.LEFT_OF, R.id.cRightImageViewId);
            rightTopTVParams.setMargins(mRightViewPaddingLeft, 0, mRightViewPaddingRight, 0);
            rightTopTextView = initText(rightTopTextView, rightTopTVParams, R.id.cRightTopTextId, mRightTopTextColor, mRightTopTextSize);
            rightTopTextView.setText(mRightTopTextString);
            rightTopTextView.setLineSpacing(mRightTextViewLineSpacingExtra, 1.0f);
            setTextViewGravity(rightTopTextView, mRightTextViewGravity);

        }

    }

    /**
     * 初始化右下textView
     */
    private void initRightBottomText() {
        if (rightBottomTextView == null) {
            if (rightBottomTVParams == null) {
                rightBottomTVParams = getParams(rightBottomTVParams);
            }
            rightBottomTVParams.addRule(RelativeLayout.CENTER_VERTICAL, TRUE);
            rightBottomTVParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, TRUE);
            rightBottomTVParams.addRule(BELOW, R.id.cCenterBaseLineId);
            rightBottomTVParams.addRule(RelativeLayout.LEFT_OF, R.id.cRightImageViewId);
            rightBottomTVParams.setMargins(mRightViewPaddingLeft, 0, mRightViewPaddingRight, 0);
            rightBottomTextView = initText(rightBottomTextView, rightBottomTVParams, R.id.cRightBottomTextId, mRightBottomTextColor, mRightBottomTextSize);
            rightBottomTextView.setText(mRightBottomTextString);
            rightBottomTextView.setLineSpacing(mRightTextViewLineSpacingExtra, 1.0f);
            setTextViewGravity(rightBottomTextView, mRightTextViewGravity);
        }
    }


    /**
     * 初始化Params
     *
     * @param params 对象
     * @return 返回
     */
    public LayoutParams getParams(LayoutParams params) {
        if (params == null) {
            params = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        }
        return params;
    }

    /**
     * 初始化textView
     *
     * @param textView     对象
     * @param layoutParams 对象
     * @param id           id
     * @param textColor    颜色值
     * @param textSize     字体大小
     * @return 返回
     */
    public TextView initText(TextView textView, LayoutParams layoutParams, int id, int textColor, int textSize) {
        if (textView == null) {
            textView = new TextView(mContext);
            textView.setId(id);
            textView.setLayoutParams(layoutParams);
            textView.setTextColor(textColor);
            textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize);
//            textView.setGravity(Gravity.CENTER);
            textView.setLines(mSetLines);
            textView.setSingleLine(mSetSingleLine);
            textView.setMaxEms(mSetMaxEms);
            textView.setEllipsize(TextUtils.TruncateAt.END);
            addView(textView);
        }
        return textView;
    }

    private void setTextViewGravity(TextView textView, int gravity_type) {

        switch (gravity_type) {
            case Gravity_Left_Center:
                textView.setGravity(Gravity.LEFT | Gravity.CENTER_VERTICAL);
                break;
            case Gravity_Center:
                textView.setGravity(Gravity.CENTER);
                break;
            case Gravity_Right_Center:
                textView.setGravity(Gravity.RIGHT | Gravity.CENTER_VERTICAL);
        }

    }

    /**
     * 设置textView的drawable
     *
     * @param textView        对象
     * @param drawableLeft    左边图标
     * @param drawableTop     上边图标
     * @param drawableRight   右边图标
     * @param drawableBottom  下边图标
     * @param drawablePadding 图标距离文字的间距
     */
    public void setDrawable(TextView textView, Drawable drawableLeft, Drawable drawableTop, Drawable drawableRight, Drawable drawableBottom, int drawablePadding) {
        textView.setCompoundDrawablesWithIntrinsicBounds(drawableLeft, drawableTop, drawableRight, drawableBottom);
        textView.setCompoundDrawablePadding(drawablePadding);
    }

    /**
     * 设置左边文字字符串
     *
     * @param string 字符串
     * @return 返回
     */
    public CommonTextView setLeftTextString(CharSequence string) {
        if (leftTextView == null) {
            initLeftText();
        }
        leftTextView.setText(string);
        return this;
    }

    /**
     * 设置左上文字字符串
     *
     * @param string 字符串
     * @return 返回
     */
    public CommonTextView setLeftTopTextString(CharSequence string) {
        if (leftTopTextView == null) {
            initLeftTopText();
        }
        leftTopTextView.setText(string);
        return this;
    }

    /**
     * 设置左下文字字符串
     *
     * @param string 字符串
     * @return 返回
     */
    public CommonTextView setLeftBottomTextString(CharSequence string) {
        if (leftBottomTextView == null) {
            initLeftBottomText();
        }
        leftBottomTextView.setText(string);
        return this;
    }

    /**
     * 设置左边文字字体大小
     *
     * @param size 字体大小
     * @return 返回
     */
    public CommonTextView setLeftTextSize(float size) {
        if (leftTextView == null) {
            initLeftText();
        }
        leftTextView.setTextSize(size);
        return this;
    }

    /**
     * set Left TextColor
     *
     * @param color textColor
     * @return return
     */
    public CommonTextView setLeftTextColor(int color) {
        if (leftTextView == null) {
            initLeftText();
        }
        leftTextView.setTextColor(color);
        return this;
    }

    /**
     * 设置中间文字字符串
     *
     * @param string 字符串
     * @return 返回
     */
    public CommonTextView setCenterTextString(CharSequence string) {
        if (centerTextView == null) {
            initCenterText();
        }
        centerTextView.setText(string);
        return this;
    }

    /**
     * 设置中上文字字符串
     *
     * @param string 字符串
     * @return 返回
     */
    public CommonTextView setCenterTopTextString(CharSequence string) {
        if (centerTopTextView == null) {
            initCenterTopText();
        }
        centerTopTextView.setText(string);
        return this;
    }

    /**
     * 设置中下文字字符串
     *
     * @param string 字符串
     * @return 返回
     */
    public CommonTextView setCenterBottomTextString(CharSequence string) {
        if (centerBottomTextView == null) {
            initCenterBottomText();
        }
        centerBottomTextView.setText(string);
        return this;
    }

    /**
     * 设置中间文字字体大小
     *
     * @param size 字体大小
     * @return 返回
     */
    public CommonTextView setCenterTextSize(float size) {
        if (centerTextView == null) {
            initCenterText();
        }
        centerTextView.setTextSize(size);
        return this;
    }

    /**
     * 设置中间文字颜色值
     *
     * @param color 颜色值
     * @return 返回
     */
    public CommonTextView setCenterTextColor(int color) {
        if (centerTextView == null) {
            initCenterText();
        }
        centerTextView.setTextColor(color);
        return this;
    }

    /**
     * 设置右边文字字符串
     *
     * @param string 字符串
     * @return 返回
     */
    public CommonTextView setRightTextString(CharSequence string) {
        if (rightTextView == null) {
            initRightText();
        }
        rightTextView.setText(string);
        return this;
    }

    /**
     * 设置右上文字字符串
     *
     * @param string 字符串
     * @return 返回
     */
    public CommonTextView setRightTopTextString(CharSequence string) {
        if (rightTopTextView == null) {
            initRightTopText();
        }
        rightTopTextView.setText(string);
        return this;
    }

    /**
     * 设置右下文字字符串
     *
     * @param string 字符串
     * @return 返回
     */
    public CommonTextView setRightBottomTextString(CharSequence string) {
        if (rightBottomTextView == null) {
            initRightBottomText();
        }
        rightBottomTextView.setText(string);
        return this;
    }

    /**
     * 设置右边文字的字体大小
     *
     * @param size 字体大小
     * @return 返回
     */
    public CommonTextView setRightTextSize(float size) {
        if (rightTextView == null) {
            initRightText();
        }
        rightTextView.setTextSize(size);
        return this;
    }

    /**
     * 设置右边文字的颜色
     *
     * @param color 颜色值
     * @return 返回
     */
    public CommonTextView setRightTextColor(int color) {
        if (rightTextView == null) {
            initRightText();
        }
        rightTextView.setTextColor(color);
        return this;
    }

    /**
     * 设置左边view的drawableLeft
     *
     * @param drawableLeft 资源
     * @return 返回
     */
    public CommonTextView setLeftDrawableLeft(Drawable drawableLeft) {
        if (drawableLeft != null) {
            drawableLeft.setBounds(0, 0, drawableLeft.getMinimumWidth(), drawableLeft.getMinimumHeight());
        }
        if (leftTextView == null) {
            initLeftText();
        }
        leftTextView.setCompoundDrawables(drawableLeft, null, null, null);
        return this;
    }

    /**
     * 设置左边view的drawableTop
     *
     * @param drawableTop 资源
     * @returnTop 返回
     */
    public CommonTextView setLeftDrawableTop(Drawable drawableTop) {
        if (drawableTop != null) {
            drawableTop.setBounds(0, 0, drawableTop.getMinimumWidth(), drawableTop.getMinimumHeight());
        }
        if (leftTextView == null) {
            initLeftText();
        }
        leftTextView.setCompoundDrawables(null, drawableTop, null, null);
        return this;
    }

    /**
     * 设置左边view的drawableRight
     *
     * @param drawableRight 资源
     * @return 返回
     */
    public CommonTextView setLeftDrawableRight(Drawable drawableRight) {
        if (drawableRight != null) {
            drawableRight.setBounds(0, 0, drawableRight.getMinimumWidth(), drawableRight.getMinimumHeight());
        }
        if (leftTextView == null) {
            initLeftText();
        }
        leftTextView.setCompoundDrawables(null, null, drawableRight, null);
        return this;
    }

    /**
     * 设置左边view的drawableBottom
     *
     * @param drawableBottom 资源
     * @return 返回
     */
    public CommonTextView setLeftDrawableBottom(Drawable drawableBottom) {
        if (drawableBottom != null) {
            drawableBottom.setBounds(0, 0, drawableBottom.getMinimumWidth(), drawableBottom.getMinimumHeight());
        }
        if (leftTextView == null) {
            initLeftText();
        }
        leftTextView.setCompoundDrawables(null, null, null, drawableBottom);
        return this;
    }

    /**
     * 设置中间view的drawableLeft
     *
     * @param drawableLeft 资源
     * @return 返回
     */
    public CommonTextView setCenterDrawableLeft(Drawable drawableLeft) {
        if (drawableLeft != null) {
            drawableLeft.setBounds(0, 0, drawableLeft.getMinimumWidth(), drawableLeft.getMinimumHeight());
        }
        if (centerTextView == null) {
            initCenterText();
        }
        centerTextView.setCompoundDrawables(drawableLeft, null, null, null);
        return this;
    }

    /**
     * 设置中间view的drawableTop
     *
     * @param drawableTop 资源
     * @returnTop 返回
     */
    public CommonTextView setCenterDrawableTop(Drawable drawableTop) {
        if (drawableTop != null) {
            drawableTop.setBounds(0, 0, drawableTop.getMinimumWidth(), drawableTop.getMinimumHeight());
        }
        if (centerTextView == null) {
            initCenterText();
        }
        centerTextView.setCompoundDrawables(null, drawableTop, null, null);
        return this;
    }

    /**
     * 设置中间view的drawableRight
     *
     * @param drawableRight 资源
     * @return 返回
     */
    public CommonTextView setCenterDrawableRight(Drawable drawableRight) {
        if (drawableRight != null) {
            drawableRight.setBounds(0, 0, drawableRight.getMinimumWidth(), drawableRight.getMinimumHeight());
        }
        if (centerTextView == null) {
            initCenterText();
        }
        centerTextView.setCompoundDrawables(null, null, drawableRight, null);
        return this;
    }

    /**
     * 设置中间view的drawableBottom
     *
     * @param drawableBottom 资源
     * @return 返回
     */
    public CommonTextView setCenterDrawableBottom(Drawable drawableBottom) {
        if (drawableBottom != null) {
            drawableBottom.setBounds(0, 0, drawableBottom.getMinimumWidth(), drawableBottom.getMinimumHeight());
        }
        if (centerTextView == null) {
            initCenterText();
        }
        centerTextView.setCompoundDrawables(null, null, null, drawableBottom);
        return this;
    }

    /**
     * 设置右边view的drawableLeft
     *
     * @param drawableLeft 资源
     * @return 返回
     */
    public CommonTextView setRightDrawableLeft(Drawable drawableLeft) {
        if (drawableLeft != null) {
            drawableLeft.setBounds(0, 0, drawableLeft.getMinimumWidth(), drawableLeft.getMinimumHeight());
        }
        if (rightTextView == null) {
            initRightText();
        }
        rightTextView.setCompoundDrawables(drawableLeft, null, null, null);
        return this;
    }

    /**
     * 设置右边view的drawableTop
     *
     * @param drawableTop 资源
     * @returnTop 返回
     */
    public CommonTextView setRightDrawableTop(Drawable drawableTop) {
        if (drawableTop != null) {
            drawableTop.setBounds(0, 0, drawableTop.getMinimumWidth(), drawableTop.getMinimumHeight());
        }
        if (rightTextView == null) {
            initRightText();
        }
        rightTextView.setCompoundDrawables(null, drawableTop, null, null);
        return this;
    }

    /**
     * 设置右边view的drawableRight
     *
     * @param drawableRight 资源
     * @return 返回
     */
    public CommonTextView setRightDrawableRight(Drawable drawableRight) {
        if (drawableRight != null) {
            drawableRight.setBounds(0, 0, drawableRight.getMinimumWidth(), drawableRight.getMinimumHeight());
        }
        if (rightTextView == null) {
            initRightText();
        }
        rightTextView.setCompoundDrawables(null, null, drawableRight, null);
        return this;
    }

    /**
     * 设置右边view的drawableBottom
     *
     * @param drawableBottom 资源
     * @return 返回
     */
    public CommonTextView setRightDrawableBottom(Drawable drawableBottom) {
        if (drawableBottom != null) {
            drawableBottom.setBounds(0, 0, drawableBottom.getMinimumWidth(), drawableBottom.getMinimumHeight());
        }
        if (rightTextView == null) {
            initRightText();
        }
        rightTextView.setCompoundDrawables(null, null, null, drawableBottom);
        return this;
    }

    /**
     * 获取左边imageView
     *
     * @return 返回imageView对象
     */
    public ImageView getLeftImageView() {
        if (leftImageView == null) {
            initLeftImageView();
        }
        return leftImageView;
    }

    /**
     * 获取左边textView的值
     *
     * @return 返回
     */
    public CharSequence getLeftTextString() {
        return leftTextView != null ? leftTextView.getText() : "";
    }

    /**
     * 获取左上textView的值
     *
     * @return 返回
     */
    public CharSequence getLeftTopTextString() {
        return leftTopTextView != null ? leftTopTextView.getText() : "";
    }

    /**
     * 获取左下textView的值
     *
     * @return 返回
     */
    public CharSequence getLeftBottomTextString() {
        return leftBottomTextView != null ? leftBottomTextView.getText() : "";
    }

    /**
     * 获取中间textView的值
     *
     * @return 返回
     */
    public CharSequence getCenterTextString() {
        return centerTextView != null ? centerTextView.getText() : "";
    }

    /**
     * 获取中上textView的值
     *
     * @return 返回
     */
    public CharSequence getCenterTopTextString() {
        return centerTopTextView != null ? centerTopTextView.getText() : "";
    }

    /**
     * 获取中下textView的值
     *
     * @return 返回
     */
    public CharSequence getCenterBottomTextString() {
        return centerBottomTextView != null ? centerBottomTextView.getText() : "";
    }

    /**
     * 获取右边textView的值
     *
     * @return 返回
     */
    public CharSequence getRightTextString() {
        return rightTextView != null ? rightTextView.getText() : "";
    }

    /**
     * 获取右上textView的值
     *
     * @return 返回
     */
    public CharSequence getRightTopTextString() {
        return rightTopTextView != null ? rightTopTextView.getText() : "";
    }

    /**
     * 获取右下textView的值
     *
     * @return 返回
     */
    public CharSequence getRightBottomTextString() {
        return rightBottomTextView != null ? rightBottomTextView.getText() : "";
    }

    /**
     * 点击事件接口
     */
    public static class OnCommonTextViewClickListener {
        public void onCommonTextViewClick() {
        }

        public void onLeftViewClick() {
        }

        public void onCenterViewClick() {
        }

        public void onRightViewClick() {
        }

    }

    /**
     * 点击事件
     *
     * @param listener listener对象
     * @return 返回当前对象便于链式操作
     */
    public CommonTextView setOnCommonTextViewClickListener(OnCommonTextViewClickListener listener) {
        this.onCommonTextViewClickListener = listener;
        return this;
    }

    /**
     * 设置左边view可点击
     *
     * @param isClickable boolean类型
     * @return 返回
     */
    public CommonTextView setLeftViewIsClickable(boolean isClickable) {
        if (isClickable) {
            if (leftTextView != null) {
                leftTextView.setOnClickListener(new OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        if (onCommonTextViewClickListener != null) {
                            onCommonTextViewClickListener.onLeftViewClick();
                        }
                    }
                });
            }
        }
        return this;
    }

    /**
     * 设置中间view可点击
     *
     * @param isClickable boolean类型
     * @return 返回
     */
    public CommonTextView setCenterViewIsClickable(boolean isClickable) {
        if (isClickable) {
            if (centerTextView != null) {
                centerTextView.setOnClickListener(new OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        if (onCommonTextViewClickListener != null) {
                            onCommonTextViewClickListener.onCenterViewClick();
                        }
                    }
                });
            }
        }
        return this;
    }

    /**
     * 设置右边view可点击
     *
     * @param isClickable boolean类型
     * @return 返回
     */
    public CommonTextView setRightViewIsClickable(boolean isClickable) {
        if (isClickable) {
            if (rightTextView != null) {
                rightTextView.setOnClickListener(new OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        if (onCommonTextViewClickListener != null) {
                            onCommonTextViewClickListener.onRightViewClick();
                        }
                    }
                });
            }
        }
        return this;
    }

    /**
     * 单位转换工具类
     *
     * @param context  上下文对象
     * @param dipValue 值
     * @return 返回值
     */
    public int dip2px(Context context, float dipValue) {
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int) (dipValue * scale + 0.5f);
    }

    /**
     * 单位转换工具类
     *
     * @param context 上下文对象
     * @param pxValue 值
     * @return 返回值
     */
    public int px2dip(Context context, float pxValue) {
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int) (pxValue / scale + 0.5f);
    }

    /**
     * 单位转换工具类
     *
     * @param context 上下文对象
     * @param spValue 值
     * @return 返回值
     */
    public int sp2px(Context context, float spValue) {
        final float scale = context.getResources().getDisplayMetrics().scaledDensity;
        return (int) (spValue * scale + 0.5f);
    }

}
package com.loaderman.textviewdemo;

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.drawable.Drawable;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.View;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;

/**
 * 万能的textView
 */

public class SuperTextView extends RelativeLayout {

    private Context mContext;
    private int defaultBgColor = 0xFFFFFFFF;//默认背景颜色
    private int defaultLineColor = 0xFFE8E8E8;//线的默认颜色
    //private int defaultLineColor = 0xFF535353;//文字默认颜色
    private int defaultLinePadding = 0;//线的左右边距

    private ImageView leftIconIV;//左边图标
    private ImageView rightIconIV;//右边图标
    private CheckBox  rightCheckBox;//右边checkbox
    private Drawable  rightCheckBoxBg;//checkBox的背景

    private TextView leftTV;//左边textView
    private TextView centerTV;//中间textView
    private TextView rightTV;//右边textView

    private TextView leftTopTV;//左上的textView
    private TextView leftBottomTV;//左下的textView
    private TextView leftBottomTV2;//左下第二个textView


    private Drawable leftIconRes;//左边图标资源
    private Drawable rightIconRes;//右边图标资源
    private String   leftTextString;//左边显示的文字
    private String   centerTextString;//中间显示的文字
    private String   rightTextString;//右边显示的文字
    private String   leftTopTextString;//左上显示的文字
    private String   leftBottomTextString;//左下显示的文字
    private String   leftBottomTextString2;//左下第二个显示的文字


    private int defaultPadding = 0;//默认边距

    private int centerSpaceHeight;//中间空间的高度

    private int bothLineWidth;
    private int topLineWidth;
    private int bottomLineWidth;
    private int lineColor = 0xFFE8E8E8;//线的默认颜色

    private int topLineMargin;//上边线的左右边距
    private int topLineMarginLeft;//上边线的左边距
    private int topLineMarginRight;//上边线的右边距

    private int bottomLineMargin;//下边线的左右边距
    private int bottomLineMarginLeft;//下边线的左边距
    private int bottomLineMarginRight;//下边线的右边距

    private int bothLineMargin;//两条线的左右边距
    private int bothLineMarginLeft;//两条线的左边距
    private int bothLineMarginRight;//两条线的右边距

    private int leftIconMarginLeft;//左边图标的左边距

    private int leftTVMarginLeft;//左边文字的左边距

    private int leftIconWidth;//左边图标的宽
    private int leftIconHeight;//左边图标的高

    private int rightIconWidth;//右边图标的宽
    private int rightIconHeight;//右边图标的高

    private int leftTopMarginLeft;//左上文字的左边距
    private int leftBottomMarginLeft;//左下文字的左边距
    private int leftBottomMarginLeft2;//左下第二个文字的左边距

    private int rightTVMarginRight;//右边文字的右边距
    private int rightIconMarginRight;//右边图标的右边距
    private int rightCheckBoxMarginRight;//右边checkBox的右边距
    private boolean showCheckBox;//是否显示右边选择框
    private boolean isChecked;//是否默认选中

    private int defaultSize = 0;//默认字体大小

    private int leftTVSize;//左边文字字体大小
    private int leftTopTVSize;//左上文字字体大小
    private int leftBottomTVSize;//左下文字字体大小
    private int leftBottomTVSize2;//左下第二个文字字体大小
    private int rightTVSize;//右边文字字体大小
    private int centerTVSize;//中间文字字体大小


    private int defaultColor = 0xFF373737;//文字默认颜色

    private int backgroundColor;//背景颜色
    private int leftTVColor;//左边文字颜色
    private int leftTopTVColor;//左上文字颜色
    private int leftBottomTVColor;//左下文字颜色
    private int leftBottomTVColor2;//左下第二个文字颜色
    private int rightTVColor;//右边文字颜色
    private int centerTVColor;//中间文字颜色

    private boolean isSingLines = true;//是否单行显示   默认单行
    private int maxLines = 1;//最多几行    默认显示一行
    private int maxEms = 10;//最多几个字    默认显示10个汉子

    private static final int NONE = 0;
    private static final int TOP = 1;
    private static final int BOTTOM = 2;
    private static final int BOTH = 3;
    private static final int DEFAULT = BOTTOM;

    public static final int leftTextViewId = 0;
    public static final int leftTopTextViewId = 1;
    public static final int leftBottomTextViewId = 2;
    public static final int leftBottomTextViewId2 = 3;
    public static final int rightTextViewId = 4;
    public static final int centerTextViewId = 5;
    public static final int leftImageViewId = 6;
    public static final int rightImageViewId = 7;

    private boolean useRipple;

    private int          lineType;
    private LayoutParams centerBaseLineParams, topLineParams, bottomLineParams, leftImgParams, leftTextParams, centerTextParams, leftTopTextParams, leftBottomParams,
            leftBottomParams2, rightTextParams, rightImgParams, rightCheckBoxParams;

    private OnSuperTextViewClickListener onSuperTextViewClickListener;
    private Drawable                     rightTextStringRightIconRes;
    private int                          rightTextStringRightIconPadding;

    private boolean mLeftTopViewIsClickable = false;
    private boolean mLeftBottomViewIsClickable = false;
    private boolean mLeftBottomView2IsClickable = false;

    private Drawable mBackground_drawable;

    public SuperTextView(Context context) {
        super(context);
    }

    public SuperTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
        mContext = context;
//        defaultLinePadding = dip2px(context, 16);
        defaultPadding = dip2px(context, 16);
        defaultSize = sp2px(context, 14);
        centerSpaceHeight = dip2px(context, 10);
        getAttr(attrs);

        initLayout();

    }

    /**
     * 获取自定义属性值
     *
     * @param attrs
     */
    private void getAttr(AttributeSet attrs) {
        TypedArray typedArray = mContext.obtainStyledAttributes(attrs, R.styleable.SuperTextView);

        ////////设置文字或者图片资源////////
        leftIconRes = typedArray.getDrawable(R.styleable.SuperTextView_sLeftIconRes);
        rightIconRes = typedArray.getDrawable(R.styleable.SuperTextView_sRightIconRes);
        rightCheckBoxBg = typedArray.getDrawable(R.styleable.SuperTextView_sRightCheckBoxRes);

        leftTextString = typedArray.getString(R.styleable.SuperTextView_sLeftTextString);
        centerTextString = typedArray.getString(R.styleable.SuperTextView_sCenterTextString);
        rightTextString = typedArray.getString(R.styleable.SuperTextView_sRightTextString);

        rightTextStringRightIconRes = typedArray.getDrawable(R.styleable.SuperTextView_sRightTextStringRightIconRes);
        rightTextStringRightIconPadding = typedArray.getDimensionPixelSize(R.styleable.SuperTextView_sRightTextStringRightIconResPadding, dip2px(mContext, 5));

        leftTopTextString = typedArray.getString(R.styleable.SuperTextView_sLeftTopTextString);
        leftBottomTextString = typedArray.getString(R.styleable.SuperTextView_sLeftBottomTextString);
        leftBottomTextString2 = typedArray.getString(R.styleable.SuperTextView_sLeftBottomTextString2);

        showCheckBox = typedArray.getBoolean(R.styleable.SuperTextView_sRightCheckBoxShow, false);
        isChecked = typedArray.getBoolean(R.styleable.SuperTextView_sIsChecked, false);
        useRipple = typedArray.getBoolean(R.styleable.SuperTextView_sUseRipple, false);

        lineType = typedArray.getInt(R.styleable.SuperTextView_sLineShow, DEFAULT);

        /////////设置view的边距////////
        centerSpaceHeight = typedArray.getDimensionPixelSize(R.styleable.SuperTextView_sCenterSpaceHeight, centerSpaceHeight);

        bothLineWidth = typedArray.getDimensionPixelSize(R.styleable.SuperTextView_sBothLineWidth, dip2px(mContext, 0.5f));
        topLineWidth = typedArray.getDimensionPixelSize(R.styleable.SuperTextView_sTopLineWidth, dip2px(mContext, 0.5f));
        bottomLineWidth = typedArray.getDimensionPixelSize(R.styleable.SuperTextView_sBottomLineWidth, dip2px(mContext, 0.5f));

        lineColor = typedArray.getColor(R.styleable.SuperTextView_sLineColor, lineColor);

        topLineMargin = typedArray.getDimensionPixelSize(R.styleable.SuperTextView_sTopLineMargin, defaultLinePadding);
        topLineMarginLeft = typedArray.getDimensionPixelSize(R.styleable.SuperTextView_sTopLineMarginLeft, defaultLinePadding);
        topLineMarginRight = typedArray.getDimensionPixelSize(R.styleable.SuperTextView_sTopLineMarginRight, defaultLinePadding);

        bottomLineMargin = typedArray.getDimensionPixelSize(R.styleable.SuperTextView_sBottomLineMargin, defaultLinePadding);
        bottomLineMarginLeft = typedArray.getDimensionPixelSize(R.styleable.SuperTextView_sBottomLineMarginLeft, defaultLinePadding);
        bottomLineMarginRight = typedArray.getDimensionPixelSize(R.styleable.SuperTextView_sBottomLineMarginRight, defaultLinePadding);

        bothLineMargin = typedArray.getDimensionPixelSize(R.styleable.SuperTextView_sBothLineMargin, defaultLinePadding);
        bothLineMarginLeft = typedArray.getDimensionPixelSize(R.styleable.SuperTextView_sBothLineMarginLeft, defaultLinePadding);
        bothLineMarginRight = typedArray.getDimensionPixelSize(R.styleable.SuperTextView_sBothLineMarginRight, defaultLinePadding);

        leftIconMarginLeft = typedArray.getDimensionPixelSize(R.styleable.SuperTextView_sLeftIconMarginLeft, defaultPadding);
        leftTVMarginLeft = typedArray.getDimensionPixelSize(R.styleable.SuperTextView_sLeftTextMarginLeft, defaultPadding);

        leftTopMarginLeft = typedArray.getDimensionPixelSize(R.styleable.SuperTextView_sLeftTopTextMarginLeft, defaultPadding);
        leftBottomMarginLeft = typedArray.getDimensionPixelSize(R.styleable.SuperTextView_sLeftBottomTextMarginLeft, defaultPadding);
        leftBottomMarginLeft2 = typedArray.getDimensionPixelSize(R.styleable.SuperTextView_sLeftBottomTextMarginLeft2, defaultPadding);
        rightTVMarginRight = typedArray.getDimensionPixelSize(R.styleable.SuperTextView_sRightTextMarginRight, defaultPadding);
        rightIconMarginRight = typedArray.getDimensionPixelSize(R.styleable.SuperTextView_sRightIconMarginRight, defaultPadding);
        rightCheckBoxMarginRight = typedArray.getDimensionPixelSize(R.styleable.SuperTextView_sRightCheckBoxMarginRight, defaultPadding);
        //////设置字体颜色////////
        backgroundColor = typedArray.getColor(R.styleable.SuperTextView_sBackgroundColor, defaultBgColor);
        leftTVColor = typedArray.getColor(R.styleable.SuperTextView_sLeftTextColor, defaultColor);
        leftTopTVColor = typedArray.getColor(R.styleable.SuperTextView_sLeftTopTextColor, defaultColor);
        leftBottomTVColor = typedArray.getColor(R.styleable.SuperTextView_sLeftBottomTextColor, defaultColor);
        leftBottomTVColor2 = typedArray.getColor(R.styleable.SuperTextView_sLeftBottomTextColor2, defaultColor);
        rightTVColor = typedArray.getColor(R.styleable.SuperTextView_sRightTextColor, defaultColor);
        centerTVColor = typedArray.getColor(R.styleable.SuperTextView_sCenterTextColor, defaultColor);
        //////设置字体大小////////
        leftTVSize = typedArray.getDimensionPixelSize(R.styleable.SuperTextView_sLeftTextSize, defaultSize);
        leftTopTVSize = typedArray.getDimensionPixelSize(R.styleable.SuperTextView_sLeftTopTextSize, defaultSize);
        leftBottomTVSize = typedArray.getDimensionPixelSize(R.styleable.SuperTextView_sLeftBottomTextSize, defaultSize);
        leftBottomTVSize2 = typedArray.getDimensionPixelSize(R.styleable.SuperTextView_sLeftBottomTextSize2, defaultSize);
        rightTVSize = typedArray.getDimensionPixelSize(R.styleable.SuperTextView_sRightTextSize, defaultSize);
        centerTVSize = typedArray.getDimensionPixelSize(R.styleable.SuperTextView_sCenterTextSize, defaultSize);

        ///////设置textView的属性///////////SuperTextViewxEms
        isSingLines = typedArray.getBoolean(R.styleable.SuperTextView_sIsSingLines, isSingLines);
        maxLines = typedArray.getInt(R.styleable.SuperTextView_sMaxLines, maxLines);
        maxEms = typedArray.getInt(R.styleable.SuperTextView_sMaxEms, maxEms);

        leftIconWidth = typedArray.getDimensionPixelSize(R.styleable.SuperTextView_sLeftIconWidth, 0);
        leftIconHeight = typedArray.getDimensionPixelSize(R.styleable.SuperTextView_sLeftIconHeight, 0);

        rightIconWidth = typedArray.getDimensionPixelSize(R.styleable.SuperTextView_sRightIconWidth, 0);
        rightIconHeight = typedArray.getDimensionPixelSize(R.styleable.SuperTextView_sRightIconHeight, 0);

        mLeftTopViewIsClickable = typedArray.getBoolean(R.styleable.SuperTextView_sLeftTopViewIsClickable, false);
        mLeftBottomViewIsClickable = typedArray.getBoolean(R.styleable.SuperTextView_sLeftBottomViewIsClickable, false);
        mLeftBottomView2IsClickable = typedArray.getBoolean(R.styleable.SuperTextView_sLeftBottomView2IsClickable, false);

        mBackground_drawable = typedArray.getDrawable(R.styleable.SuperTextView_sBackgroundDrawableRes);

        typedArray.recycle();
    }

    /**
     * 初始化布局
     */
    private void initLayout() {

        initSuperTextView();
        initCenterBaseLine();

        if (leftIconRes != null) {
            initLeftIcon();
        }
        if (leftTopTextString != null) {
            initLeftTopText();
        }
        if (leftBottomTextString != null) {
            initLeftBottomText();
        }
        if (leftBottomTextString2 != null) {
            initLeftBottomText2();
        }
        if (leftTextString != null) {
            initLeftText();
        }
        if (centerTextString != null) {
            initCenterText();
        }
        if (rightIconRes != null) {
            initRightIcon();
        }
        if (rightTextString != null || rightTextStringRightIconRes != null) {
            initRightText();
        }
        if (showCheckBox) {
            initRightCheckBox();
        }

        switch (lineType) {
            case NONE:
                break;
            case TOP:
                setTopLineMargin();
                break;
            case BOTTOM:
                setBottomLineMargin();
                break;
            case BOTH:
                setTopLineMargin();
                setBottomLineMargin();
                break;
        }
    }


    /**
     * 设置顶部分割线的左右边距
     */
    private void setTopLineMargin() {
        if (topLineMargin != 0) {
            initTopLine(topLineMargin, topLineMargin, topLineWidth);
        } else if (bothLineMarginLeft != 0 | bothLineMarginRight != 0) {
            initTopLine(bothLineMarginLeft, bothLineMarginRight, topLineWidth);
        } else {
            initTopLine(topLineMarginLeft, topLineMarginRight, topLineWidth);
        }
    }

    /**
     * 设置底部分割线的左右边距
     */
    private void setBottomLineMargin() {
        if (bottomLineMargin != 0) {
            initBottomLine(bottomLineMargin, bottomLineMargin, bottomLineWidth);
        } else if (bothLineMarginLeft != 0 | bothLineMarginRight != 0) {
            initBottomLine(bothLineMarginLeft, bothLineMarginRight, topLineWidth);
        } else {
            initBottomLine(bottomLineMarginLeft, bottomLineMarginRight, topLineWidth);
        }
    }

    /**
     * 初始化上边的线
     */
    private void initTopLine(int lineMarginLeft, int lineMarginRight, int lineWidth) {
        View topLine = new View(mContext);
        topLineParams = new LayoutParams(LayoutParams.MATCH_PARENT, lineWidth);
        topLineParams.addRule(RelativeLayout.ALIGN_PARENT_TOP, TRUE);
        topLineParams.setMargins(lineMarginLeft, 0, lineMarginRight, 0);
        topLine.setLayoutParams(topLineParams);
        topLine.setBackgroundColor(lineColor);
        addView(topLine);
    }

    /**
     * 初始化下边的线
     */
    private void initBottomLine(int lineMarginLeft, int lineMarginRight, int lineWidth) {
        View bottomLine = new View(mContext);
        bottomLineParams = new LayoutParams(LayoutParams.MATCH_PARENT, lineWidth);
        bottomLineParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, TRUE);
        bottomLineParams.setMargins(lineMarginLeft, 0, lineMarginRight, 0);
        bottomLine.setLayoutParams(bottomLineParams);
        bottomLine.setBackgroundColor(lineColor);
        addView(bottomLine);
    }

    /**
     * 初始化SuperTextView
     */
    private void initSuperTextView() {

        this.setBackgroundColor(backgroundColor);
        this.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {
                if (onSuperTextViewClickListener != null) {
                    onSuperTextViewClickListener.onSuperTextViewClick();
                }
            }
        });

        if (useRipple) {
            this.setBackgroundResource(R.drawable.selector_white);
        }
        if (mBackground_drawable != null) {
            this.setBackgroundDrawable(mBackground_drawable);
        }
    }


    /**
     * 为了设置上下两排文字居中对齐显示而需要设置的基准线
     */
    private void initCenterBaseLine() {
        View view = new View(mContext);
        centerBaseLineParams = new LayoutParams(LayoutParams.MATCH_PARENT, centerSpaceHeight);
        centerBaseLineParams.addRule(RelativeLayout.CENTER_VERTICAL, TRUE);
        view.setId(R.id.sCenterBaseLineId);
        view.setLayoutParams(centerBaseLineParams);
        addView(view);
    }


    /**
     * 初始化左边图标
     */
    private void initLeftIcon() {
        leftIconIV = new ImageView(mContext);
        leftImgParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        leftImgParams.addRule(ALIGN_PARENT_LEFT, TRUE);
        leftImgParams.addRule(RelativeLayout.CENTER_VERTICAL, TRUE);
        if (leftIconHeight != 0 && leftIconWidth != 0) {
            leftImgParams.width = leftIconWidth;
            leftImgParams.height = leftIconHeight;
        }
        setMargin(leftImgParams, leftIconMarginLeft, 0, 0, 0);
        leftIconIV.setScaleType(ImageView.ScaleType.FIT_CENTER);
        leftIconIV.setId(R.id.sLeftIconId);
        leftIconIV.setLayoutParams(leftImgParams);
        if (leftIconRes != null) {
            leftIconIV.setImageDrawable(leftIconRes);
        }
        addView(leftIconIV);
    }

    /**
     * 初始化左边文字
     */
    private void initLeftText() {
        leftTV = new TextView(mContext);
        leftTextParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        leftTextParams.addRule(RelativeLayout.CENTER_VERTICAL, TRUE);
        leftTextParams.addRule(RelativeLayout.RIGHT_OF, R.id.sLeftIconId);
        setMargin(leftTextParams, leftTVMarginLeft, 0, dip2px(mContext, 10), 0);
        leftTV.setId(R.id.sLeftTextId);
        leftTV.setLayoutParams(leftTextParams);
        leftTV.setText(leftTextString);

        setTextViewParams(leftTV, isSingLines, maxLines, maxEms);

        setTextColor(leftTV, leftTVColor);
        setTextSize(leftTV, leftTVSize);
        addView(leftTV);
    }

    /**
     * 设置通用的textView显示效果属性
     *
     * @param textView    view
     * @param isSingLines 是否单行显示
     * @param maxLines    显示最大行
     * @param maxEms      最多显示多少个字
     */
    private void setTextViewParams(TextView textView, boolean isSingLines, int maxLines, int maxEms) {
        textView.setSingleLine(isSingLines);
        textView.setMaxLines(maxLines);
        textView.setMaxEms(maxEms);
        textView.setEllipsize(TextUtils.TruncateAt.END);
    }

    /**
     * 初始化左上文字
     */
    private void initLeftTopText() {
        leftTopTV = new TextView(mContext);
        leftTopTextParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        leftTopTextParams.addRule(RelativeLayout.ABOVE, R.id.sCenterBaseLineId);
        leftTopTextParams.addRule(RelativeLayout.RIGHT_OF, R.id.sLeftIconId);
        setMargin(leftTopTextParams, leftTopMarginLeft, 0, 0, 0);
        leftTopTV.setId(R.id.sLeftTopTextId);
        leftTopTV.setLayoutParams(leftTopTextParams);
        leftTopTV.setText(leftTopTextString);
        setTextColor(leftTopTV, leftTopTVColor);
        setTextSize(leftTopTV, leftTopTVSize);
        if (mLeftTopViewIsClickable) {
            leftTopTV.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View view) {
                    if (onSuperTextViewClickListener != null) {
                        onSuperTextViewClickListener.onLeftTopClick();
                    }
                }
            });
        }
        setTextViewParams(leftTopTV, isSingLines, maxLines, maxEms);
        addView(leftTopTV);
    }

    /**
     * 初始化左下文字
     */
    private void initLeftBottomText() {
        leftBottomTV = new TextView(mContext);
        leftBottomParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        leftBottomParams.addRule(RelativeLayout.BELOW, R.id.sCenterBaseLineId);
        leftBottomParams.addRule(RelativeLayout.RIGHT_OF, R.id.sLeftIconId);
        setMargin(leftBottomParams, leftBottomMarginLeft, 0, 0, 0);
        leftBottomTV.setId(R.id.sLeftBottomTextId);
        leftBottomTV.setLayoutParams(leftBottomParams);
        leftBottomTV.setText(leftBottomTextString);
        setTextColor(leftBottomTV, leftBottomTVColor);
        setTextSize(leftBottomTV, leftBottomTVSize);
        if (mLeftBottomViewIsClickable) {
            leftBottomTV.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View view) {
                    if (onSuperTextViewClickListener != null) {
                        onSuperTextViewClickListener.onLeftBottomClick();
                    }
                }
            });
        }
        setTextViewParams(leftBottomTV, isSingLines, maxLines, maxEms);
        addView(leftBottomTV);
    }

    /**
     * 初始化左下第二个文字
     */
    private void initLeftBottomText2() {
        leftBottomTV2 = new TextView(mContext);
        leftBottomParams2 = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        leftBottomParams2.addRule(RelativeLayout.BELOW, R.id.sCenterBaseLineId);
        leftBottomParams2.addRule(RelativeLayout.RIGHT_OF, R.id.sLeftBottomTextId);
        setMargin(leftBottomParams2, leftBottomMarginLeft2, 0, 0, 0);
        leftBottomTV2.setId(R.id.sLeftBottomTextId2);
        leftBottomTV2.setLayoutParams(leftBottomParams2);
        leftBottomTV2.setText(leftBottomTextString2);
        setTextColor(leftBottomTV2, leftBottomTVColor2);
        setTextSize(leftBottomTV2, leftBottomTVSize2);
        if (mLeftBottomView2IsClickable) {
            leftBottomTV2.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View view) {
                    if (onSuperTextViewClickListener != null) {
                        onSuperTextViewClickListener.onLeftBottomClick2();
                    }
                }
            });
        }
        setTextViewParams(leftBottomTV2, isSingLines, maxLines, maxEms);
        addView(leftBottomTV2);
    }

    /**
     * 初始化中间文字
     */
    private void initCenterText() {
        centerTV = new TextView(mContext);
        centerTextParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        centerTextParams.addRule(RelativeLayout.CENTER_IN_PARENT, TRUE);
        centerTV.setId(R.id.sCenterTextId);
        centerTV.setLayoutParams(centerTextParams);
        centerTV.setText(centerTextString);
        setTextColor(centerTV, centerTVColor);
        setTextSize(centerTV, centerTVSize);
        setTextViewParams(centerTV, isSingLines, maxLines, maxEms);
        addView(centerTV);
    }

    /**
     * 初始化右边文字
     */
    private void initRightText() {
        rightTV = new TextView(mContext);
        rightTextParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        rightTextParams.addRule(RelativeLayout.CENTER_VERTICAL, TRUE);
        rightTextParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, TRUE);
        rightTextParams.addRule(RelativeLayout.RIGHT_OF, R.id.sLeftTextId);
        rightTextParams.addRule(RelativeLayout.LEFT_OF, R.id.sRightIconId);
        setMargin(rightTextParams, 0, 0, rightTVMarginRight, 0);
        rightTV.setId(R.id.sRightTextId);
        rightTV.setLayoutParams(rightTextParams);
        rightTV.setText(rightTextString);
        setTextColor(rightTV, rightTVColor);
        setTextSize(rightTV, rightTVSize);
        setTextViewRightDrawble(rightTV, rightTextStringRightIconRes, rightTextStringRightIconPadding);
        rightTV.setGravity(Gravity.RIGHT);
        setTextViewParams(rightTV, isSingLines, maxLines, maxEms);
        addView(rightTV);
    }

    /**
     * 初始化右边图标
     */
    private void initRightIcon() {
        rightIconIV = new ImageView(mContext);
        rightImgParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        rightImgParams.addRule(ALIGN_PARENT_RIGHT, TRUE);
        rightImgParams.addRule(RelativeLayout.CENTER_VERTICAL, TRUE);
        if (rightIconHeight != 0 && rightIconWidth != 0) {
            rightImgParams.width = rightIconWidth;
            rightImgParams.height = rightIconHeight;
        }
        setMargin(rightImgParams, 0, 0, rightIconMarginRight, 0);
        rightIconIV.setScaleType(ImageView.ScaleType.FIT_CENTER);
        rightIconIV.setId(R.id.sRightIconId);
        rightIconIV.setLayoutParams(rightImgParams);
        if (rightIconRes != null) {
            rightIconIV.setImageDrawable(rightIconRes);
        }
        addView(rightIconIV);
    }

    /**
     * 初始化右边选择框
     */
    private void initRightCheckBox() {
        rightCheckBox = new CheckBox(mContext);

        rightCheckBoxParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

        rightCheckBoxParams.addRule(ALIGN_PARENT_RIGHT, TRUE);
        rightCheckBoxParams.addRule(RelativeLayout.CENTER_VERTICAL, TRUE);
        setMargin(rightCheckBoxParams, 0, 0, rightCheckBoxMarginRight, 0);
        rightCheckBox.setLayoutParams(rightCheckBoxParams);
        if (rightCheckBoxBg != null) {
            rightCheckBox.setGravity(CENTER_IN_PARENT);
            rightCheckBox.setButtonDrawable(rightCheckBoxBg);
        }
        rightCheckBox.setChecked(isChecked);
        addView(rightCheckBox);
    }

    private void setMargin(LayoutParams params, int left, int top, int right, int bottom) {
        params.setMargins(left, top, right, bottom);
    }

    /**
     * 设置view的边距
     *
     * @param view   view对象
     * @param left   左边边距
     * @param top    上边边距
     * @param right  右边边距
     * @param bottom 下边边距
     */
    private void setPadding(View view, int left, int top, int right, int bottom) {
        view.setPadding(left, top, right, bottom);
    }

    /**
     * 设置文字的字体大小
     *
     * @param textView textView对象
     * @param size     文字大小
     */
    private void setTextSize(TextView textView, int size) {
        textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, size);
    }

    /**
     * 设置文字的颜色
     *
     * @param textView textView对象
     * @param color    文字颜色
     */
    private void setTextColor(TextView textView, int color) {
        textView.setTextColor(color);
    }

    //////////对外公布的方法///////////////

    /**
     * 设置左边图标
     *
     * @param leftIcon 左边图标
     * @return 返回对象
     */
    public SuperTextView setLeftIcon(Drawable leftIcon) {
        leftIconRes = leftIcon;
        if (leftIconIV == null) {
            initLeftIcon();
        } else {
            leftIconIV.setImageDrawable(leftIcon);
        }
        return this;
    }

    /**
     * 设置右边图标
     *
     * @param rightIcon 右边图标
     * @return 返回对象
     */
    public SuperTextView setRightIcon(Drawable rightIcon) {
        rightIconRes = rightIcon;
        if (rightIconIV == null) {
            initRightIcon();
        } else {
            rightIconIV.setImageDrawable(rightIcon);
        }
        return this;
    }

    /**
     * 设置左边显示文字
     *
     * @param leftString 左边文字
     * @return 返回对象
     */
    public SuperTextView setLeftString(String leftString) {
        leftTextString = leftString;
        if (leftTV == null) {
            initLeftText();
        } else {
            leftTV.setText(leftString);
        }
        return this;
    }

    /**
     * 设置左上显示的文字
     *
     * @param leftTopString 左上文字
     * @return 返回对象
     */
    public SuperTextView setLeftTopString(String leftTopString) {
        leftTopTextString = leftTopString;
        if (leftTopTV == null) {
            initLeftTopText();
        } else {
            leftTopTV.setText(leftTopString);
        }
        return this;
    }

    /**
     * 设置左下显示的文字
     *
     * @param leftBottomString 左下第一个文字
     * @return 返回对象
     */
    public SuperTextView setLeftBottomString(String leftBottomString) {
        leftBottomTextString = leftBottomString;
        if (leftBottomTV == null) {
            initLeftBottomText();
        } else {
            leftBottomTV.setText(leftBottomString);
        }
        return this;
    }

    /**
     * 设置左下第二个显示的文字
     *
     * @param leftBottomString2 左下第二个文字
     * @return 返回对象
     */
    public SuperTextView setLeftBottomString2(String leftBottomString2) {
        leftBottomTextString2 = leftBottomString2;
        if (leftBottomTV2 == null) {
            initLeftBottomText2();
        } else {
            leftBottomTV2.setText(leftBottomString2);
        }
        return this;
    }

    /**
     * 设置右边显示的文字
     *
     * @param rightString 右边文字
     * @return 返回对象
     */
    public SuperTextView setRightString(String rightString) {
        rightTextString = rightString;
        if (rightTV == null) {
            initRightText();
        } else {
            rightTV.setText(rightString);
        }
        return this;
    }

    /**
     * 设置右边显示的文字和图片
     *
     * @param rightString     右边文字
     * @param drawable        drawable
     * @param drawablePadding drawablePadding
     * @return
     */
    public SuperTextView setRightString(String rightString, Drawable drawable, int drawablePadding) {
        rightTextString = rightString;
        rightTextStringRightIconRes = drawable;
        rightTextStringRightIconPadding = drawablePadding;
        if (rightTV == null) {
            initRightText();
        } else {
            rightTV.setText(rightString);
        }
        return this;
    }


    /**
     * 设备中间文字
     *
     * @param centerString 中间文字
     * @return 返回对象
     */
    public SuperTextView setCenterString(String centerString) {
        centerTextString = centerString;
        if (centerTV == null) {
            initCenterText();
        } else {
            centerTV.setText(centerString);
        }
        return this;
    }

    /**
     * @param checked 是否选中
     * @return 返回值
     */
    public SuperTextView setCbChecked(boolean checked) {
        isChecked = checked;
        if (rightCheckBox == null) {
            initRightCheckBox();
        } else {
            rightCheckBox.setChecked(checked);
        }
        return this;
    }

    /**
     * 设置checkbox的背景图
     *
     * @param drawable drawable对象
     * @return 返回对象
     */
    public SuperTextView setCbBackground(Drawable drawable) {
        rightCheckBoxBg = drawable;
        if (rightCheckBox == null) {
            initRightCheckBox();
        } else {
            rightCheckBox.setBackgroundDrawable(drawable);
        }
        return this;
    }

    /**
     * 获取checkbox状态
     *
     * @return 返回选择框当前选中状态
     */
    public boolean getCbisChecked() {
        boolean isChecked = false;
        if (rightCheckBox != null) {
            isChecked = rightCheckBox.isChecked();
        }
        return isChecked;
    }

    /**
     * 设置左边文字的颜色
     *
     * @param textColor 文字颜色值
     * @return 返回对象
     */
    public SuperTextView setLeftTVColor(int textColor) {
        leftTVColor = textColor;
        if (leftTV == null) {
            initLeftText();
        } else {
            leftTV.setTextColor(textColor);
        }
        return this;
    }

    /**
     * 设置右边文字的颜色
     *
     * @param textColor 文字颜色值
     * @return 返回对象
     */
    public SuperTextView setRightTVColor(int textColor) {
        rightTVColor = textColor;
        if (rightTV == null) {
            initRightText();
        } else {
            rightTV.setTextColor(textColor);
        }
        return this;
    }

    /**
     * 设置左上边文字的颜色
     *
     * @param textColor 文字颜色值
     * @return 返回对象
     */
    public SuperTextView setLeftTopTVColor(int textColor) {
        leftTopTVColor = textColor;
        if (leftTopTV == null) {
            initLeftTopText();
        } else {
            leftTopTV.setTextColor(textColor);
        }
        return this;
    }

    /**
     * 设置左下边文字的颜色
     *
     * @param textColor 文字颜色值
     * @return 返回对象
     */
    public SuperTextView setLeftBottomTVColor(int textColor) {
        leftBottomTVColor = textColor;
        if (leftBottomTV == null) {
            initLeftBottomText();
        } else {
            leftBottomTV.setTextColor(textColor);
        }
        return this;
    }

    /**
     * 设置左下第二个文字的颜色
     *
     * @param textColor 文字颜色值
     * @return 返回对象
     */
    public SuperTextView setLeftBottomTVColor2(int textColor) {
        leftBottomTVColor2 = textColor;
        if (leftBottomTV2 == null) {
            initLeftBottomText2();
        } else {
            leftBottomTV2.setTextColor(textColor);
        }
        return this;
    }

    //////////设置View的点击事件/////////////////

    /**
     * 点击事件
     *
     * @param listener listener对象
     * @return 返回对象
     */
    public SuperTextView setOnSuperTextViewClickListener(OnSuperTextViewClickListener listener) {
        onSuperTextViewClickListener = listener;
        return this;
    }

    /**
     * 点击事件接口
     */
    public static class OnSuperTextViewClickListener {
        public void onSuperTextViewClick() {
        }

        public void onLeftTopClick() {
        }

        public void onLeftBottomClick() {
        }

        public void onLeftBottomClick2() {
        }

    }

    /**
     * 获取控件ID便于根据ID设置值
     *
     * @param viewName 需要的textViewName
     * @return 返回ID
     */
    public int getViewId(int viewName) {
        int viewId = 0;
        switch (viewName) {
            case leftTextViewId:
                if (leftTV == null) {
                    initLeftText();
                }
                viewId = R.id.sLeftTextId;
                break;
            case leftTopTextViewId:
                if (leftTopTV == null) {
                    initLeftTopText();
                }
                viewId = R.id.sLeftTopTextId;
                break;
            case leftBottomTextViewId:
                if (leftBottomTV == null) {
                    initLeftBottomText();
                }
                viewId = R.id.sLeftBottomTextId;
                break;
            case leftBottomTextViewId2:
                if (leftBottomTV2 == null) {
                    initLeftBottomText2();
                }
                viewId = R.id.sLeftBottomTextId2;
                break;
            case centerTextViewId:
                if (centerTV == null) {
                    initCenterText();
                }
                viewId = R.id.sCenterTextId;
                break;
            case rightTextViewId:
                if (rightTV == null) {
                    initRightText();
                }
                viewId = R.id.sRightTextId;
                break;
            case leftImageViewId:
                if (leftIconIV == null) {
                    initLeftIcon();
                }
                viewId = R.id.sLeftIconId;
                break;
            case rightImageViewId:
                if (rightIconIV == null) {
                    initRightIcon();
                }
                viewId = R.id.sRightIconId;
                break;
        }
        return viewId;
    }

    /**
     * 获取view对象
     *
     * @param viewName 传入viewName
     * @return 返回view
     */
    public View getView(int viewName) {
        View view = null;
        switch (viewName) {

            case leftImageViewId:
                if (leftIconIV == null) {
                    initLeftIcon();
                }
                view = leftIconIV;
                break;
            case rightImageViewId:
                if (rightIconIV == null) {
                    initRightIcon();
                }
                view = rightIconIV;
                break;
        }
        return view;
    }


    public int dip2px(Context context, float dipValue) {
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int) (dipValue * scale + 0.5f);
    }

    public int px2dip(Context context, float pxValue) {
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int) (pxValue / scale + 0.5f);
    }

    public int sp2px(Context context, float spValue) {
        final float scale = context.getResources().getDisplayMetrics().scaledDensity;
        return (int) (spValue * scale + 0.5f);
    }

    public static void setTextViewRightDrawble(TextView textView, Drawable drawable, int drawablePadding) {
        if (drawable != null && textView != null) {
            drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight());
            textView.setCompoundDrawables(null, null, drawable, null);
            textView.setCompoundDrawablePadding(drawablePadding);
        }
    }

    /**
     * 设置左上view可点击
     *
     * @param isClickable boolean类型
     * @return 返回
     */
    public SuperTextView setLeftTopViewIsClickable(boolean isClickable) {
        if (isClickable) {
            if (leftTopTV != null) {
                leftTopTV.setOnClickListener(new OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        if (onSuperTextViewClickListener != null) {
                            onSuperTextViewClickListener.onLeftTopClick();
                        }
                    }
                });
            }
        }

        return this;
    }

    /**
     * 设置左下第一个view可点击
     *
     * @param isClickable boolean类型
     * @return 返回
     */
    public SuperTextView setLeftBottomViewIsClickable(boolean isClickable) {
        if (isClickable) {
            if (leftBottomTV != null) {
                leftBottomTV.setOnClickListener(new OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        if (onSuperTextViewClickListener != null) {
                            onSuperTextViewClickListener.onLeftBottomClick();
                        }
                    }
                });
            }
        }
        return this;
    }

    /**
     * 设置左下第二个view可点击
     *
     * @param isClickable boolean类型
     * @return 返回
     */
    public SuperTextView setLeftBottomView2IsClickable(boolean isClickable) {
        if (isClickable) {
            if (leftBottomTV2 != null) {
                leftBottomTV2.setOnClickListener(new OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        if (onSuperTextViewClickListener != null) {
                            onSuperTextViewClickListener.onLeftBottomClick2();
                        }
                    }
                });
            }
        }
        return this;
    }
}

 selector_while.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:drawable="@color/common_pressed"
        android:state_pressed="true" />
    <item
        android:drawable="@color/white" />
</selector>

 attrs.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="BaseTextView">
        <attr name="sDrawableLeft" format="reference" />
        <attr name="sDrawableTop" format="reference" />
        <attr name="sDrawableRight" format="reference" />
        <attr name="sDrawableBottom" format="reference" />

        <attr name="sTextString" format="string" />
        <attr name="sTextSize" format="dimension" />
        <attr name="sTextColor" format="color" />

        <attr name="sDrawablePadding" format="dimension" />

        <attr name="sPadding" format="dimension" />
        <attr name="sPaddingLeft" format="dimension" />
        <attr name="sPaddingTop" format="dimension" />
        <attr name="sPaddingBottom" format="dimension" />
        <attr name="sPaddingRight" format="dimension" />


    </declare-styleable>

    <declare-styleable name="SuperTextView">
        <attr name="sLeftIconRes" format="reference" />
        <attr name="sRightIconRes" format="reference" />

        <attr name="sLeftIconWidth" format="dimension" />
        <attr name="sLeftIconHeight" format="dimension" />

        <attr name="sRightIconWidth" format="dimension" />
        <attr name="sRightIconHeight" format="dimension" />

        <attr name="sRightCheckBoxRes" format="reference" />

        <attr name="sLeftTextString" format="string" />
        <attr name="sCenterTextString" format="string" />
        <attr name="sRightTextString" format="string" />

        <attr name="sLeftTopTextString" format="string" />
        <attr name="sLeftBottomTextString" format="string" />
        <attr name="sLeftBottomTextString2" format="string" />


        <attr name="sTopLineMargin" format="dimension" />
        <attr name="sTopLineMarginLeft" format="dimension" />
        <attr name="sTopLineMarginRight" format="dimension" />

        <attr name="sBottomLineMargin" format="dimension" />
        <attr name="sBottomLineMarginLeft" format="dimension" />
        <attr name="sBottomLineMarginRight" format="dimension" />

        <attr name="sBothLineMargin" format="dimension" />
        <attr name="sBothLineMarginLeft" format="dimension" />
        <attr name="sBothLineMarginRight" format="dimension" />

        <attr name="sCenterSpaceHeight" format="dimension" />

        <attr name="sLeftIconMarginLeft" format="dimension" />
        <attr name="sLeftTextMarginLeft" format="dimension" />

        <attr name="sLeftTopTextMarginLeft" format="dimension" />
        <attr name="sLeftBottomTextMarginLeft" format="dimension" />
        <attr name="sLeftBottomTextMarginLeft2" format="dimension" />

        <attr name="sRightTextStringRightIconRes" format="reference" />
        <attr name="sRightTextStringRightIconResPadding" format="dimension" />

        <attr name="sRightIconMarginRight" format="dimension" />
        <attr name="sRightTextMarginRight" format="dimension" />
        <attr name="sRightCheckBoxMarginRight" format="dimension" />
        <attr name="sRightCheckBoxShow" format="boolean" />
        <attr name="sIsChecked" format="boolean" />
        <attr name="sUseRipple" format="boolean" />

        <attr name="sLeftTextSize" format="dimension" />
        <attr name="sLeftTopTextSize" format="dimension" />
        <attr name="sLeftBottomTextSize" format="dimension" />
        <attr name="sLeftBottomTextSize2" format="dimension" />
        <attr name="sRightTextSize" format="dimension" />
        <attr name="sCenterTextSize" format="dimension" />


        <attr name="sBackgroundColor" format="color" />
        <attr name="sLeftTextColor" format="color" />
        <attr name="sLeftTopTextColor" format="color" />
        <attr name="sLeftBottomTextColor" format="color" />
        <attr name="sLeftBottomTextColor2" format="color" />
        <attr name="sRightTextColor" format="color" />
        <attr name="sCenterTextColor" format="color" />

        <attr name="sIsSingLines" format="boolean" />
        <attr name="sMaxLines" format="integer" />
        <attr name="sMaxEms" format="integer" />

        <attr name="sLineShow" format="enum">
            <enum name="none" value="0" />
            <enum name="top" value="1" />
            <enum name="bottom" value="2" />
            <enum name="both" value="3" />
        </attr>

        <attr name="sBothLineWidth" format="dimension" />
        <attr name="sTopLineWidth" format="dimension" />
        <attr name="sBottomLineWidth" format="dimension" />
        <attr name="sLineColor" format="color" />

        <attr name="sLeftTopViewIsClickable" format="boolean" />
        <attr name="sLeftBottomViewIsClickable" format="boolean" />
        <attr name="sLeftBottomView2IsClickable" format="boolean" />

        <attr name="sBackgroundDrawableRes" format="reference" />

    </declare-styleable>

    <declare-styleable name="CommonTextView">

        <attr name="cLeftIconResForDrawableLeft" format="reference" />
        <attr name="cLeftIconResForDrawableTop" format="reference" />
        <attr name="cLeftIconResForDrawableRight" format="reference" />
        <attr name="cLeftIconResForDrawableBottom" format="reference" />

        <attr name="cCenterIconResForDrawableLeft" format="reference" />
        <attr name="cCenterIconResForDrawableTop" format="reference" />
        <attr name="cCenterIconResForDrawableRight" format="reference" />
        <attr name="cCenterIconResForDrawableBottom" format="reference" />

        <attr name="cRightIconResForDrawableLeft" format="reference" />
        <attr name="cRightIconResForDrawableTop" format="reference" />
        <attr name="cRightIconResForDrawableRight" format="reference" />
        <attr name="cRightIconResForDrawableBottom" format="reference" />

        <attr name="cLeftImageViewDrawableRes" format="reference" />
        <!--<attr name="cRightImageViewDrawableRes" format="reference" />-->


        <attr name="cLeftTextString" format="string" />
        <attr name="cLeftTopTextString" format="string" />
        <attr name="cLeftBottomTextString" format="string" />

        <attr name="cCenterTextString" format="string" />
        <attr name="cCenterTopTextString" format="string" />
        <attr name="cCenterBottomTextString" format="string" />

        <attr name="cRightTextString" format="string" />
        <attr name="cRightTopTextString" format="string" />
        <attr name="cRightBottomTextString" format="string" />

        <attr name="cLeftTextSize" format="dimension" />
        <attr name="cLeftTopTextSize" format="dimension" />
        <attr name="cLeftBottomTextSize" format="dimension" />

        <attr name="cCenterTextSize" format="dimension" />
        <attr name="cCenterTopTextSize" format="dimension" />
        <attr name="cCenterBottomTextSize" format="dimension" />

        <attr name="cRightTextSize" format="dimension" />
        <attr name="cRightTopTextSize" format="dimension" />
        <attr name="cRightBottomTextSize" format="dimension" />

        <attr name="cLeftTextColor" format="color" />
        <attr name="cLeftTopTextColor" format="color" />
        <attr name="cLeftBottomTextColor" format="color" />

        <attr name="cCenterTextColor" format="color" />
        <attr name="cCenterTopTextColor" format="color" />
        <attr name="cCenterBottomTextColor" format="color" />

        <attr name="cRightTextColor" format="color" />
        <attr name="cRightTopTextColor" format="color" />
        <attr name="cRightBottomTextColor" format="color" />

        <attr name="cLeftIconDrawablePadding" format="dimension" />
        <attr name="cCenterIconDrawablePadding" format="dimension" />
        <attr name="cRightIconDrawablePadding" format="dimension" />

        <attr name="cLeftViewPaddingLeft" format="dimension" />
        <attr name="cLeftViewPaddingRight" format="dimension" />
        <attr name="cCenterViewPaddingLeft" format="dimension" />
        <attr name="cCenterViewPaddingRight" format="dimension" />
        <attr name="cRightViewPaddingLeft" format="dimension" />
        <attr name="cRightViewPaddingRight" format="dimension" />

        <attr name="cTopDividerLineMarginLR" format="dimension" />
        <attr name="cTopDividerLineMarginLeft" format="dimension" />
        <attr name="cTopDividerLineMarginRight" format="dimension" />

        <attr name="cBottomDividerLineMarginLR" format="dimension" />
        <attr name="cBottomDividerLineMarginLeft" format="dimension" />
        <attr name="cBottomDividerLineMarginRight" format="dimension" />

        <attr name="cBothDividerLineMarginLeft" format="dimension" />
        <attr name="cBothDividerLineMarginRight" format="dimension" />


        <attr name="cLeftTextViewLineSpacingExtra" format="dimension" />
        <attr name="cCenterTextViewLineSpacingExtra" format="dimension" />
        <attr name="cRightTextViewLineSpacingExtra" format="dimension" />

        <attr name="cCenterSpaceHeight" format="dimension" />

        <attr name="cLeftImageViewMarginLeft" format="dimension" />
        <!--<attr name="cRightImageViewMarginRight" format="dimension" />-->

        <attr name="cDividerLineColor" format="color" />
        <attr name="cDividerLineHeight" format="dimension" />

        <attr name="cShowDividerLineType" format="enum">
            <enum name="none" value="0" />
            <enum name="top" value="1" />
            <enum name="bottom" value="2" />
            <enum name="both" value="3" />
        </attr>

        <attr name="cUseRipple" format="boolean" />
        <attr name="cBackgroundColor" format="color" />

        <attr name="cSetSingleLine" format="boolean" />
        <attr name="cSetMaxEms" format="integer" />
        <attr name="cSetLines" format="integer" />

        <attr name="cLeftTextViewGravity" format="enum">
            <enum name="left_center" value="0" />
            <enum name="center" value="1" />
            <enum name="right_center" value="2" />
        </attr>
        <attr name="cCenterTextViewGravity" format="enum">
            <enum name="left_center" value="0" />
            <enum name="center" value="1" />
            <enum name="right_center" value="2" />
        </attr>
        <attr name="cRightTextViewGravity" format="enum">
            <enum name="left_center" value="0" />
            <enum name="center" value="1" />
            <enum name="right_center" value="2" />
        </attr>

        <attr name="cLeftViewIsClickable" format="boolean" />
        <attr name="cCenterViewIsClickable" format="boolean" />
        <attr name="cRightViewIsClickable" format="boolean" />

        <attr name="cBackgroundDrawableRes" format="reference" />
        <attr name="cIsCenterAlignLeft" format="boolean" />
        <attr name="cCenterViewMarginLeft" format="dimension" />


    </declare-styleable>
</resources>

 color.xml

<!-- 白色 -->
    <color name="white">#FFF</color>
    <color name="common_pressed">#20000000</color>  <!--白色背景按下去的颜色-->
    <color name="line">#e8e8e8</color>

 common_textview_ids.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <item name="cLeftTextId" type="id" />
    <item name="cRightTextId" type="id" />
    <item name="cCenterTextId" type="id" />

    <item name="cCenterBaseLineId" type="id" />

    <item name="cLeftTopTextId" type="id" />
    <item name="cLeftBottomTextId" type="id" />

    <item name="cCenterTopTextId" type="id" />
    <item name="cCenterBottomTextId" type="id" />

    <item name="cRightTopTextId" type="id" />
    <item name="cRightBottomTextId" type="id" />

    <item name="cLeftImageViewId" type="id" />
    <item name="cRightImageViewId" type="id" />

</resources>

 ids.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <item name="sLeftIconId" type="id" />
    <item name="sCenterBaseLineId" type="id" />
    <item name="sCenterTextId" type="id" />
    <item name="sLeftTextId" type="id" />
    <item name="sLeftTopTextId" type="id" />
    <item name="sLeftBottomTextId" type="id" />
    <item name="sLeftBottomTextId2" type="id" />
    <item name="sRightTextId" type="id" />
    <item name="sRightIconId" type="id" />
</resources>

学习来源:https://github.com/lygttpod/SuperTextView


原文地址:https://www.cnblogs.com/loaderman/p/6970448.html