在Android项目开发中我们常常会用到自定义的标题栏,可是Android系统中自带的ActionBar太难看了,因此我们通常会自己写一个控件来实现TitelBar的功能,接下来让我来说说如何实现这一个过程吧,直接上代码:
接下来我们为各个控件实现设置标题,图片以及点击事件的功能,如下
然后我们就可以在界面MainActivity中这样实现了
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,在构造函数中初始化各个控件,如下所示:
在上面我们直接写一个layout布局,自己把各个控件摆放好,layout布局如下:
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);
}
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();
}
});
}
titleBar = (TitleBar) findViewById(R.id.titleBar);
//设置标题
titleBar.setTitleName("空调维护");
//点击左边返回上一个界面
titleBar.setLeftBtnListener(new BtnListener() {
@Override
public void click() {
finish();
}
});
具体界面效果如下: