前言
在Android开发过程中,自定义标题栏的使用十分常见。在之前的文章,我已经讲过一篇自定义标题栏的文章,有兴趣的可以参考
自定义标题栏TitleBar
可以说这篇文章已经将自定义标题栏的使用讲解得十分清楚了,无奈我当时的设计为了让控件中的控件数目少些,于是使用了自定义控件ImageTextView,事实证明在这个控件的嵌套下有利有弊,最大的弊端就是对于图片显示的支持不是很到位,会导致图片拉伸啊之类的导致显示失真,这是我不能忍的,也是当初为了贪图控件少留下的后患吧。这也就是今天这篇文章的由来,新写一个自定义标题栏类TitleBar2,完美实现TitleBar的功能,虽然实现和调用稍微麻烦一点点,但是功能及显示效果上比TitleBar好很多。那么今天就来讲讲自定义标题栏类TitleBar2的使用吧。
今天涉及的内容:
-
TitleBar2简介 -
TitleBar2使用介绍
2.1 在xml文件中引入TitleBar2控件
2.2 在MainActivity中初始化TitleBar2及获取其子控件对象
2.3 TitleBar2显示样式
2.4 TitleBar2设置图标
2.5 TitleBar2设置文字
2.6 TitleBar2设置子控件的padding和margin
2.7 TitleBar2设置点击事件 -
TitleBar2在MainActivity中使用 - 效果图和项目结构图
-
TitleBar2源码
先来波效果图

一.TitleBar2简介
TitleBar2是一个自定义标题栏,其中包含5个子控件,分别是左返回键图标,左返回键文字,中间标题文字,右返回键文字,右返回键图标五个控件。可以满足开发基本样式使用需求。
二.TitleBar2使用介绍
2.1 在xml文件中引入TitleBar2控件
在你的xml文件中,引入TitleBar2控件,你可以类似下面这样:
<com.testdemo.other.TitleBar2
android:id="@+id/title_bar2"
android:layout_width="0dp"
android:layout_height="50dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
2.2 在MainActivity中初始化TitleBar2及获取其子控件对象
初始化TitleBar2如下:
//声明控件
private TitleBar2 mTitleBar2;
//初始化
mTitleBar2=findViewById(R.id.title_bar2);
获取TitleBar2子控件如下:
//获取控件对象
ImageView imvLeft=mTitleBar2.getImvLeft();//左侧返回键图片对象
TextView tvLeft=mTitleBar2.getTvLeft();//左侧返回键文字对象
TextView tvTitle=mTitleBar2.getTvTitle();//标题栏中间文字对象
TextView tvRight=mTitleBar2.getTvRight();//右侧返回键文字对象
ImageView imvRight=mTitleBar2.getImvRight();//右侧返回键图片对象
2.3 TitleBar2显示样式
默认情况下,TitleBar2所有子控件均不显示,需要啥样式自己显示出来。
例如我只要显示中间标题的样式,我可以这样(为方便看效果,标题栏背景使用红色):
mTitleBar2.getTvTitle().setVisibility(View.VISIBLE);
显示效果如下

下面以左返回键为例(右返回键雷同,此处不表),显示左返回键图标+标题:
mTitleBar2.getImvLeft().setVisibility(View.VISIBLE);
mTitleBar2.getTvTitle().setVisibility(View.VISIBLE);
//显示左侧图标
mTitleBar2.getImvLeft().setImageResource(R.mipmap.ic_back_left);
效果如下

显示左返回键文字+标题
mTitleBar2.getTvLeft().setVisibility(View.VISIBLE);
mTitleBar2.getTvTitle().setVisibility(View.VISIBLE);
//显示左返回键文字
mTitleBar2.getTvLeft().setText("左返");//设置文字
mTitleBar2.setTextSize(mTitleBar2.getTvLeft(),5);//设置文字大小
mTitleBar2.setTextColor(mTitleBar2.getTvLeft(), R.color.blue);//设置文字颜色
//显示中间title
mTitleBar2.getTvTitle().setText("标题栏");//设置文字
mTitleBar2.setTextSize(mTitleBar2.getTvTitle(),5);//设置文字大小
mTitleBar2.setTextColor(mTitleBar2.getTvTitle(), R.color.green);//设置文字颜色
显示如下:

显示左返图标+左返文字+标题
//显示控件
mTitleBar2.getImvLeft().setVisibility(View.VISIBLE);
mTitleBar2.getTvLeft().setVisibility(View.VISIBLE);
mTitleBar2.getTvTitle().setVisibility(View.VISIBLE);
//显示左侧图标
mTitleBar2.getImvLeft().setImageResource(R.mipmap.ic_back_left);
//显示左返回键文字
mTitleBar2.getTvLeft().setText("左返");//设置文字
mTitleBar2.setTextSize(mTitleBar2.getTvLeft(),5);//设置文字大小
mTitleBar2.setTextColor(mTitleBar2.getTvLeft(), R.color.blue);//设置文字颜色
//显示中间title
mTitleBar2.getTvTitle().setText("标题栏");//设置文字
mTitleBar2.setTextSize(mTitleBar2.getTvTitle(),5);//设置文字大小
mTitleBar2.setTextColor(mTitleBar2.getTvTitle(), R.color.green);//设置文字颜色
效果如下

2.4 TitleBar2设置图标
以设置左侧返回键图标为例,你可以这样设置
//显示左侧图标和右侧图标
mTitleBar2.getImvLeft().setImageResource(R.mipmap.ic_back_left);
2.5 TitleBar2设置文字
以标题文字的设置为例,你可以这样:
//显示中间title
mTitleBar2.getTvTitle().setText("标题栏");//设置文字
mTitleBar2.setTextSize(mTitleBar2.getTvTitle(),5);//设置文字大小
mTitleBar2.setTextColor(mTitleBar2.getTvTitle(), R.color.green);//设置文字颜色
2.6 TitleBar2设置子控件的padding和margin
//设置控件padding
mTitleBar2.setPaddings(mTitleBar2.getImvLeft(),2,2,2,2);
//设置控件margin
mTitleBar2.setMargins(mTitleBar2.getImvLeft(),2,2,2,2);
2.7 TitleBar2设置点击事件
//左侧返回键点击事件
mTitleBar2.setOnClickLeft(new View.OnClickListener() {
@Override
public void onClick(View v) {
ToastUtil.shortShow("====左侧被点击了====");
LogUtil.i("====左侧被点击了====");
}
});
//中间点击事件
mTitleBar2.setOnClickCenter(new View.OnClickListener() {
@Override
public void onClick(View v) {
ToastUtil.shortShow("====我是中间点击事件====");
LogUtil.i("====我是中间点击事件====");
}
});
//右侧点击事件
mTitleBar2.setOnClickRight(new View.OnClickListener() {
@Override
public void onClick(View v) {
ToastUtil.shortShow("====点击右侧干啥====");
LogUtil.i("====点击右侧干啥====");
}
});
三.TitleBar2在MainActivity中使用
下面贴出TitleBar2在MainActivity中使用代码:
public class MainActivity extends AppCompatActivity{
private TextView mTextView;
private Button mButton;
//声明控件
private TitleBar2 mTitleBar2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTextView=findViewById(R.id.tv);
mButton=findViewById(R.id.btn);
//初始化自定义标题栏
initTitle();
mButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
LogUtil.i("=====ooooooo==1===");
}
});
}
private void initTitle(){
//初始化
mTitleBar2=findViewById(R.id.title_bar2);
//获取控件对象
ImageView imvLeft=mTitleBar2.getImvLeft();//左侧返回键图片对象
TextView tvLeft=mTitleBar2.getTvLeft();//左侧返回键文字对象
TextView tvTitle=mTitleBar2.getTvTitle();//标题栏中间文字对象
TextView tvRight=mTitleBar2.getTvRight();//右侧返回键文字对象
ImageView imvRight=mTitleBar2.getImvRight();//右侧返回键图片对象
//显示控件
mTitleBar2.getImvLeft().setVisibility(View.VISIBLE);
mTitleBar2.getTvLeft().setVisibility(View.VISIBLE);
mTitleBar2.getTvTitle().setVisibility(View.VISIBLE);
mTitleBar2.getTvRight().setVisibility(View.VISIBLE);
mTitleBar2.getImvRight().setVisibility(View.VISIBLE);
//显示左侧图标和右侧图标
mTitleBar2.getImvLeft().setImageResource(R.mipmap.ic_back_left);
mTitleBar2.getImvRight().setImageResource(R.mipmap.ic_back_right);
//显示左返回键文字
mTitleBar2.getTvLeft().setText("左返");//设置文字
mTitleBar2.setTextSize(mTitleBar2.getTvLeft(),5);//设置文字大小
mTitleBar2.setTextColor(mTitleBar2.getTvLeft(), R.color.blue);//设置文字颜色
//显示中间title
mTitleBar2.getTvTitle().setText("标题栏");//设置文字
mTitleBar2.setTextSize(mTitleBar2.getTvTitle(),5);//设置文字大小
mTitleBar2.setTextColor(mTitleBar2.getTvTitle(), R.color.green);//设置文字颜色
//显示右返回键文字
mTitleBar2.getTvRight().setText("右返");//设置文字
mTitleBar2.setTextSize(mTitleBar2.getTvRight(),5);//设置文字大小
mTitleBar2.setTextColor(mTitleBar2.getTvRight(), R.color.blue);//设置文字颜色
//设置控件padding
mTitleBar2.setPaddings(mTitleBar2.getImvLeft(),2,2,2,2);
//设置控件margin
mTitleBar2.setMargins(mTitleBar2.getImvLeft(),2,2,2,2);
//左侧返回键点击事件
mTitleBar2.setOnClickLeft(new View.OnClickListener() {
@Override
public void onClick(View v) {
ToastUtil.shortShow("====左侧被点击了====");
LogUtil.i("====左侧被点击了====");
}
});
//中间点击事件
mTitleBar2.setOnClickCenter(new View.OnClickListener() {
@Override
public void onClick(View v) {
ToastUtil.shortShow("====我是中间点击事件====");
LogUtil.i("====我是中间点击事件====");
}
});
//右侧点击事件
mTitleBar2.setOnClickRight(new View.OnClickListener() {
@Override
public void onClick(View v) {
ToastUtil.shortShow("====点击右侧干啥====");
LogUtil.i("====点击右侧干啥====");
}
});
}
}
四.效果图和项目结构图


五.TitleBar2源码
下面贴出TitleBar2源码: