android中自定义控件之TitleBar实现

在Android项目开发中我们常常会用到自定义的标题栏,可是Android系统中自带的ActionBar太难看了,因此我们通常会自己写一个控件来实现TitelBar的功能,接下来让我来说说如何实现这一个过程吧,直接上代码:
public class TitleBar extends LinearLayout {
	private TextView titleName;
	private TextView right;
	private ImageButton back;
	Context context;

	public TitleBar(Context context) {
		super(context);
		this.context = context;
		init();
	}

	public TitleBar(Context context, AttributeSet attrs) {
		// 一些控件你不调用的话默认为view.gone;
		super(context, attrs);
		this.context = context;
		init();
	}
首先TitleBar继承于Linearlayout,在构造函数中初始化各个控件,如下所示:
private void init() {
		LayoutInflater.from(context).inflate(R.layout.titlebar, this);
		back = (ImageButton) findViewById(R.id.back);
		right = (TextView) findViewById(R.id.right);
		titleName = (TextView) findViewById(R.id.title);

	
	}
在上面我们直接写一个layout布局,自己把各个控件摆放好,layout布局如下:
接下来我们为各个控件实现设置标题,图片以及点击事件的功能,如下
public void setTitle(String name, Object right) {
		setTitleName(name);
		setRightText(right);
	}

	// 设置titleBar名字
	public void setTitleName(String Name) {
		titleName.setVisibility(View.VISIBLE);
		titleName.setText(Name);
	}

	public String getTitleName() {
		if (titleName != null)
			return titleName.getText().toString();
		return null;
	}

	public View getRightView() {
		return right;
	}

	// 设置右边按钮图标
	public void setRightText(Object rightSrc) {
		if (rightSrc != null) {
			if (rightSrc instanceof String) {
				String text = (String) rightSrc;
				right.setText(text);
			} else if (rightSrc instanceof Integer) {
				right.setText("");
				int img = (Integer) rightSrc;
				Drawable a = getResources().getDrawable(img);
				int size = CommonUtils.dip2px(context, 18);
				a.setBounds(0, 0, size, size);
				right.setCompoundDrawables(a, null, null, null);
			}
		}
	}
相信这些代码逻辑大家都能看得懂,都是根据我们所需的界面要求进行设置显示,接下重点讲一下如何为自定义控件添加点击事件呢?由于点击事件是由外界触发的,所以里面的逻辑实现肯定不能写在这个TtileBar的类里面,因此我们需要提供一个接口供给外界使用,这就用到了接口回调机制。首先定义一个接口BtnListener里面有一个方法onclick()如下:
public interface BtnListener {
	public abstract void click();
}
然后就可以给左边或右边按钮添加点击事件了:
// 设置左边按钮监听
	public void setLeftBtnListener(final BtnListener listener) {
		if (back.getVisibility() != View.INVISIBLE) {
			back.setOnClickListener(new OnClickListener() {
				@Override
				public void onClick(View v) {
					listener.click();
				}
			});
		}

	}

	// 设置右边按钮监听
	public void setRightBtnListener(final BtnListener listener) {
		right.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				listener.click();
			}
		});
	}
然后我们就可以在界面MainActivity中这样实现了
titleBar = (TitleBar) findViewById(R.id.titleBar);
//设置标题
titleBar.setTitleName("空调维护");
//点击左边返回上一个界面
titleBar.setLeftBtnListener(new BtnListener() {

			@Override
			public void click() {
				finish();
			
			}
		});
具体界面效果如下:


你可能感兴趣的:(android中自定义控件之TitleBar实现)