您的位置:首页 > 运维架构

自定义 TopBar

2015-11-05 15:00 417 查看
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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: