自定標題欄

一.定義屬性

在xml中定義你所需要的屬性

有關於屬性的介紹可以查看我之前的一篇文章:

https://blog.csdn.net/xxdw1992/article/details/78936532

二.源碼

public class HeadView extends RelativeLayout {
    private TextView title, rightTv;
    private ImageView leftIv, rightIv;
    private OnListener onListener;

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

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

    public HeadView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        intAttribute(context, attrs, defStyleAttr);
    }

    /**
     * 初始化佈局和屬性
     */
    private void intAttribute(Context context, AttributeSet attrs, int defStyleAttr) {
        initView(context);
        TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.HeadView);
        String titlestr = typedArray.getString(R.styleable.HeadView_title);
        String rightTvstr = typedArray.getString(R.styleable.HeadView_right_tv);
        if (titlestr != null) {
            title.setText(titlestr);
        }
        if (rightTvstr != null) {
            rightTv.setText(rightTvstr);
        }
        boolean rightIvGone = typedArray.getBoolean(R.styleable.HeadView_rightivgone, false);
        boolean leftIvGone = typedArray.getBoolean(R.styleable.HeadView_leftivgone, false);
        int rightIvRes = typedArray.getResourceId(R.styleable.HeadView_right_iv, 0);
        int leftIvRes = typedArray.getResourceId(R.styleable.HeadView_left_iv, 0);
        /*如果設置左邊Iv隱藏,則不設置背景 */
        if (leftIvGone) {
            leftIv.setVisibility(View.GONE);
        } else {
            leftIv.setImageResource(leftIvRes);
        }
        if (rightIvGone) {
            rightIv.setVisibility(View.GONE);
        } else {
            rightIv.setImageResource(rightIvRes);
        }
        typedArray.recycle();
    }

    /**
     * 初始化控件
     */
    private void initView(Context context) {
        View view = LayoutInflater.from(context).inflate(R.layout.headiew_layout, this, true);
        title = view.findViewById(R.id.title_title);
        leftIv = view.findViewById(R.id.title_leftiv);
        rightIv = view.findViewById(R.id.right_iv);
        rightTv = view.findViewById(R.id.right_tv);
        leftIv.setOnClickListener(v -> onListener.leftIv());
        rightIv.setOnClickListener(v -> onListener.rightIv());
        rightTv.setOnClickListener(v -> onListener.rightTv());
    }


    public interface OnListener {

        /**
         * 左邊圖標監聽
         */
        void leftIv();

        /**
         * 右邊圖片監聽
         */
        default void rightIv() {
        }

        /**
         * 右邊文字監聽
         */
        default void rightTv() {

        }

    }

    /**
     * 設置監聽的接口回調
     */
    public void setOnViewClick(OnListener click) {
        onListener = click;
    }

    //設置標題
    public void setTitle(String str) {
        if (!TextUtils.isEmpty(str)) {
            title.setText(str);
        }
    }

    //設置標題文字大小
    public void setTitleSize(int size) {
        if (title != null) {
            title.setTextSize(TypedValue.COMPLEX_UNIT_SP, size);
        }
    }

    //設置右標題文字
    public void setRightText(String s) {
        if (!TextUtils.isEmpty(s)) {
            rightTv.setText(s);
        }
    }


    //設置右標題文字大小
    public void setRightTextSize(int size) {
        if (rightTv != null) {
            rightTv.setTextSize(TypedValue.COMPLEX_UNIT_SP, size);
        }
    }

    //設置左圖標資源
    public void setLeftDrawable(int res) {
        if (leftIv != null) {
            leftIv.setVisibility(View.VISIBLE);
            leftIv.setImageResource(res);
        }
    }

    //設置右圖標資源
    public void setRightDrawable(int res) {
        if (rightIv != null) {
            rightIv.setVisibility(View.VISIBLE);
            rightIv.setImageResource(res);
        }
    }
}

三.XML中調用

四.注意事項

xml的入口是從第二構造函數進入的,由於我的方法是寫在第三構造函數,要用this調用

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章