android中自定义控件之TitleBar实现
16lz
2021-01-26
在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() {@Overridepublic void onClick(View v) {listener.click();}});}}// 设置右边按钮监听public void setRightBtnListener(final BtnListener listener) {right.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {listener.click();}});}
然后我们就可以在界面MainActivity中这样实现了
titleBar = (TitleBar) findViewById(R.id.titleBar);//设置标题titleBar.setTitleName("空调维护");//点击左边返回上一个界面titleBar.setLeftBtnListener(new BtnListener() {@Overridepublic void click() {finish();}});
具体界面效果如下: 更多相关文章
- Android(安卓)Studio --“Cannot resolve symbol” 解决办法
- 【Android进阶学习】设置透明效果的三种方法
- Android实现再图标右上角显示数字
- android ViewPager 实现点击小圆点切换页面 案例
- Android仿淘宝添加商品时属性规格popupwindow
- android 设置为壁纸代码
- Android(安卓)Gallery 的简单使用
- Android(安卓)api28 tablayout改变
- 设置布局默认为LinearLayout,却成了RelativeLayout