自定义View-组合控件,组合标题

自定义View-组合控件,组合标题

布局文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:background="@color/title_bar_color"
    android:gravity="center_vertical"
    android:paddingTop="20dp">

    <ImageView
        android:id="@+id/title_ib_back"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:layout_centerVertical="true"
        android:layout_marginTop="5dp"
        android:scaleType="centerInside"
        android:src="@drawable/bg_back_selector" />

    <TextView
        android:id="@+id/title_txt_left"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:layout_centerVertical="true"
        android:layout_marginStart="5dp"
        android:background="@null"
        android:gravity="center"
        android:textColor="@color/white"
        android:textSize="@dimen/font_size_14sp" />

    <TextView
        android:id="@+id/title_txt_center"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:ellipsize="end"
        android:maxEms="15"
        android:singleLine="true"
        android:textColor="@color/white"
        android:textSize="@dimen/font_size_18sp" />

    <TextView
        android:id="@+id/title_txt_right"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentEnd="true"
        android:layout_centerVertical="true"
        android:layout_marginEnd="5dp"
        android:textColor="@color/white"
        android:textSize="@dimen/font_size_14sp" />

    <ImageView
        android:id="@+id/title_ib_right"
        android:layout_width="35dp"
        android:layout_height="35dp"
        android:layout_alignParentEnd="true"
        android:layout_centerVertical="true"
        android:layout_marginTop="5dp"
        android:scaleType="centerInside" />

</RelativeLayout>

attrs属性

<!-- titlebar 标题栏 -->
<declare-styleable name="TitleView">
    <attr name="textInfoLeft" format="string"></attr>
    <attr name="textInfoCenter" format="string"></attr>
    <attr name="textInfoRight" format="string"></attr>
    <attr name="leftBtnIcon" format="reference"></attr>
    <attr name="backBtnIcon" format="reference"></attr>
    <attr name="rightBtnIcon" format="reference"></attr>
    <attr name="rightBtnIcon2" format="reference"></attr>
    <attr name="rightBtnIcon3" format="reference"></attr>
    <attr name="hasBackBtn" format="boolean"></attr>
    <attr name="hasLeftBtn" format="boolean"></attr>
    <attr name="hasRightBtn" format="boolean"></attr>
    <attr name="hasRightBtn2" format="boolean"></attr>
    <attr name="hasRightBtn3" format="boolean"></attr>
</declare-styleable>

最后是核心代码

package com.example.administrator.newspolice.view;


import android.app.Activity;
import android.content.Context;
import android.content.res.TypedArray;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;

import com.example.administrator.newspolice.R;


/**
 * Description:标题布局
 */
public class TitleView extends RelativeLayout {
    /**
     * 文本信息
     */
    private String textInfoLeft;
    private String textInfoCenter;
    private String textInfoRight;
    /**
     * 是否有返回按钮、右侧按钮
     */
    private boolean hasBackBtn;
    private boolean hasRightBtn;

    /**
     * 标题
     */
    private TextView txtLeft;
    private TextView txtCenter;
    private TextView txtRight;
    /**
     * 返回按钮、右侧按钮
     */
    private ImageView ibBack;
    private ImageView ibRight;

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

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

    public TitleView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        LayoutInflater.from(context).inflate(R.layout.title_view_layout, this);
        ibBack = (ImageView) findViewById(R.id.title_ib_back);
        ibRight = (ImageView) findViewById(R.id.title_ib_right);
        txtLeft = (TextView) findViewById(R.id.title_txt_left);
        txtCenter = (TextView) findViewById(R.id.title_txt_center);
        txtRight = (TextView) findViewById(R.id.title_txt_right);
        TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.TitleView);
        int n = array.getIndexCount();
        for (int i = 0; i < n; i++) {
            int attr = array.getIndex(i);
            switch (attr) {
                case R.styleable.TitleView_textInfoLeft:
                    textInfoLeft = array.getString(attr);
                    break;
                case R.styleable.TitleView_textInfoCenter:
                    textInfoCenter = array.getString(attr);
                    break;
                case R.styleable.TitleView_textInfoRight:
                    textInfoRight = array.getString(attr);
                    break;
                // 是否有左侧按钮,默认设置为false
                case R.styleable.TitleView_hasBackBtn:
                    hasBackBtn = array.getBoolean(attr, false);
                    break;
                // 是否有右侧按钮,默认设置为false
                case R.styleable.TitleView_hasRightBtn:
                    hasRightBtn = array.getBoolean(attr, false);
                    break;
                // 左边侧按钮图片
                case R.styleable.TitleView_leftBtnIcon:
                    ibBack.setImageResource(array.getResourceId(attr, -1));
                    break;
                // 右侧按钮图片
                case R.styleable.TitleView_rightBtnIcon:
                    ibRight.setImageResource(array.getResourceId(attr, -1));
                    break;
            }
        }
        array.recycle();

        if (!TextUtils.isEmpty(textInfoLeft)) {
            txtLeft.setText(textInfoLeft);
        }
        if (!TextUtils.isEmpty(textInfoCenter)) {
            txtCenter.setText(textInfoCenter);
        }
        if (!TextUtils.isEmpty(textInfoRight)) {
            txtRight.setText(textInfoRight);
        }
        if (!hasBackBtn) {
            ibBack.setVisibility(View.GONE);
        } else {
            ibBack.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    ((Activity) getContext()).finish();
                }
            });
        }

        if (!hasRightBtn) {
            ibRight.setVisibility(View.GONE);
        }
    }

    public void setHasRightBtn(boolean tag) {
        if(tag){
            ibRight.setVisibility(View.VISIBLE);
        }else{
            ibRight.setVisibility(View.GONE);
        }
    }
    public void setHasRightInfo(boolean tag) {
        if(tag){
            txtRight.setVisibility(View.VISIBLE);
        }else{
            txtRight.setVisibility(View.GONE);
        }
    }
    public void setTextInfoLeft(String textInfoLeft) {
        txtLeft.setText(textInfoLeft);
    }


    public void setTextInfoCenter(String textInfoCenter) {
        txtCenter.setText(textInfoCenter);
    }



    public void setTextInfoRight(String textInfoRight) {
        txtRight.setText(textInfoRight);
    }

    public void setRightBtnIcon(int resId) {
        ibRight.setImageResource(resId);
    }

    public void setRightTxtBg(int resId) {
        txtRight.setBackgroundResource(resId);
    }

    public void setRightTxtColor(int resId) {
        txtRight.setTextColor(resId);
    }

    public void setLeftBtnListener(OnClickListener l) {
        ibBack.setOnClickListener(l);
    }

    public void setRightBtnListener(OnClickListener l) {
        ibRight.setOnClickListener(l);
    }

    public void setLeftTextInfoListener(OnClickListener l) {
        txtLeft.setOnClickListener(l);
    }

    public void setRightTextInfoListener(OnClickListener l) {
        txtRight.setOnClickListener(l);
    }

}