自定义 TopBar

package com.weidingqiang.customchinacar.views.topbar;

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

import com.weidingqiang.customchinacar.R;
import com.weidingqiang.customchinacar.utils.MathTools;

/**
 * Created by weidingqiang on 15/10/27.
 * 通用标题组件
 */
/**
 * 标题组件 由三个组件构成
 * 左为 返回按钮固定
 * 中间 标题或者图片
 * 右边 文字或者按钮组件
 */
public class BaseTopBar extends RelativeLayout implements View.OnClickListener{

    public static final String TAG = BaseTopBar.class.getSimpleName();

    //中间是否显示文字
    private Boolean isShowMiddleTextView;
    //中间文字
    private String middleText;
    //中间图片
    private Drawable middleImage;
    //是否显示右边内容
    private Boolean isShowRight;
    //是否显示右边文字
    private Boolean isShowRightTextView;
    //右边文字
    private String rightText;
    //右边图片
    private Drawable rightImage;
    //左边图片
    private Drawable leftImage;

    //左边按钮
    private ImageView backImageView;

    //中间组件
    private TextView middleTextView;
    private ImageView middleImageView;

    //右边组件
    private TextView rightTextView;
    private ImageView rightImageView;

    //导航条的按钮接口
    private TopbarImp topbarImp;

    public void setTopbarImp(TopbarImp topbarImp) {
        this.topbarImp = topbarImp;
    }


    public BaseTopBar(Context context, AttributeSet attrs) {
        super(context, attrs);

        TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.baseTopBar);
        isShowMiddleTextView = typedArray.getBoolean(R.styleable.baseTopBar_isShowMiddleTextView,true);
        middleText = typedArray.getString(R.styleable.baseTopBar_middleText);
        middleImage = typedArray.getDrawable(R.styleable.baseTopBar_middleImage);
        isShowRight = typedArray.getBoolean(R.styleable.baseTopBar_isShowRight,false);
        isShowRightTextView = typedArray.getBoolean(R.styleable.baseTopBar_isShowRightTextView,false);
        rightText =typedArray.getString(R.styleable.baseTopBar_rightText);
        rightImage = typedArray.getDrawable(R.styleable.baseTopBar_rightImage);
        leftImage = typedArray.getDrawable(R.styleable.baseTopBar_leftImage);
        typedArray.recycle();

        initView(context);
    }

    /**
     * 初始化UI
     */
    private void initView(Context context) {
        //设置背景
        this.setBackgroundColor(getResources().getColor(R.color.topbar_bg));

        //left layout
        backImageView = new ImageView(context);

        LayoutParams leftlayout = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
                ViewGroup.LayoutParams.WRAP_CONTENT);
        leftlayout.addRule(RelativeLayout.CENTER_VERTICAL);
        leftlayout.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
        leftlayout.leftMargin = (int)getResources().getDimension(R.dimen.topbar_margin);
        if(leftImage != null){
            backImageView.setImageDrawable(leftImage);
        }else
        {
            backImageView.setImageResource(R.drawable.left_arrow_back);
        }

        backImageView.setOnClickListener(this);
        addView(backImageView, leftlayout);

        //middle layout
        LayoutParams middlelayout = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
                ViewGroup.LayoutParams.WRAP_CONTENT);
        middlelayout.addRule(RelativeLayout.CENTER_IN_PARENT,TRUE);
        //如果 为 true 则显示文字  否则显示图片
        if(isShowMiddleTextView){
            middleTextView = new TextView(context);
            middleTextView.setText(middleText);
            middleTextView.setTextColor(getResources().getColor(R.color.whitesmoke));
            middleTextView.setTextSize(TypedValue.COMPLEX_UNIT_PX,getResources().getDimension(R.dimen.topbar_middletext_size));
            addView(middleTextView,middlelayout);
        }else {
            middleImageView = new ImageView(context);
            middleImageView.setImageDrawable(middleImage);
            addView(middleImageView,middlelayout);
        }

        //right layout
        if(isShowRight){
            LayoutParams rightlayoutParams = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
                    ViewGroup.LayoutParams.WRAP_CONTENT);
            rightlayoutParams.addRule(RelativeLayout.CENTER_VERTICAL,TRUE);
            rightlayoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT,TRUE);
            rightlayoutParams.rightMargin = (int)getResources().getDimension(R.dimen.topbar_margin);

            if(isShowRightTextView){
                rightTextView = new TextView(context);
                rightTextView.setText(rightText);
                rightTextView.setTextColor(getResources().getColor(R.color.whitesmoke));
                rightTextView.setTextSize(TypedValue.COMPLEX_UNIT_PX,getResources().getDimension(R.dimen.topbar_middletext_size));

                rightTextView.setOnClickListener(this);
                addView(rightTextView, rightlayoutParams);
            }else {
                rightImageView = new ImageView(context);
                rightImageView.setImageDrawable(rightImage);
                rightImageView.setOnClickListener(this);
                addView(rightImageView, rightlayoutParams);
            }
        }
    }


    @Override
    public void onClick(View v) {
        if(v == backImageView){
            topbarImp.back();
        }
        else {
            topbarImp.rightClick();
        }
    }
}

 

 

<!--topbar 样式 -->
<declare-styleable name="baseTopBar">
<!--是否显示中间的TextView false 为显示imageview -->
<attr name="leftImage" format="reference"/>
<attr name="isShowMiddleTextView" format="boolean" />
<attr name="middleText" format="string"/>
<attr name="middleImage" format="reference"/>
<attr name="isShowRight" format="boolean"/>
<attr name="isShowRightTextView" format="boolean"/>
<attr name="rightText" format="string"/>
<attr name="rightImage" format="reference"/>
</declare-styleable>

posted @ 2015-11-05 15:00  weidingqiang  阅读(334)  评论(0)    收藏  举报