一、前言
在android应用开发中,标题栏在界面设计中布局简单,但是复用率极高,因此封装特别必要。一个封装好的标题栏能够节约大量开发时间,而且易于维护。
二、需求分析(因具体项目而异)
1.常见样式
①只有标题内容
②有标题和左侧内容
③有标题和右侧内容
④有标题和两侧内容
⑤有两侧内容无标题
2.常见属性
①左中右是否显示
②左中右文字大小和颜色
③左右是文字or图标
④整体背景颜色
3.常见点击事件
①左侧点击事件
②右侧点击事件
4.其他
①需要适配状态栏
②背景颜色切换时,图标和文字属性自动切换(项目中背景色不为白色时,图标和文字颜色大多时候为白色)
③下划线和阴影
三、具体实现
1.父类最好为Toolbar,因为5.0好多新特性是需要和Toolbar搭配的
public class CustomToolBar extends Toolbar {
}
2.标题栏的高度参考actionBarSize就好
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
3.留一个View动态适配适配状态栏高度
<FrameLayout
android:id="@+id/fl_status"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="visible" />
FrameLayout fl_status = mView.findViewById(R.id.fl_status);
View statusBar = new View(getContext());
LayoutParams flp = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT, Gravity.CENTER_HORIZONTAL);
flp.height = getStatusBarHeight(getContext());
fl_status.addView(statusBar,flp);
4.判断背景颜色是否为白色,如果不是文字颜色都改为白色,图标颜色渲染为白色并设置Drawable,例如:
if (rightIcon != null){
Drawable wrappedDrawable = DrawableCompat.wrap(rightIcon);
DrawableCompat.setTintList(wrappedDrawable,
ColorStateList.valueOf(Color.parseColor("#ffffff")));
rightIcon = wrappedDrawable;
setRightIcon(rightIcon);
}
5.下划线用高度为1px或者1dp的View占位即可
<View
android:id="@+id/line"
android:background="@color/line_color"
android:layout_width="match_parent"
android:layout_height="1px"/>
6.阴影分为5.0以上以及5.0以下
①>=5.0
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
setElevation(dp2px(5));
}
②<5.0用占位View设置渐变色即可,但是缺点是阴影会占据一定空间,因此demo中没有添加
7.属性汇总
名称 | 描述 | 值的类型 |
isFitStatusBar | 是否适配状态栏,如果true,则会自定填充状态栏高度的留白 | boolean |
rightIcon | 右侧图标 | reference |
leftIcon | 左侧图标 | reference |
titleText | 标题 | String |
rightText | 右侧文字 | String |
leftText | 左侧文字 | String |
isShowLeft | 是否显示左侧内容(默认返回箭头) | boolean |
isShowBottomLine | 是否显示底部隔线 | boolean |
isShowShadow | 是否显示阴影(白色背景默认为true,其他背景默认为false,目前只支持5.0以上) | boolean |
bgColor | 背景颜色(默认白色) | reference |
textColor | 文字颜色 | reference |
rightTextColor | 右侧文字颜色 | reference |
shadowColor | 阴影的颜色 | reference |
titleTextSize | 标题文字大小 | dimension |
leftTextSize | 左侧文字大小 | dimension |
rightTextSize | 右侧文字大小 | dimension |
8.方法汇总
名称 | 描述 |
setLeftOnClickListener(OnClickListener listener) | 左侧点击事件监听 |
setRightOnClickListener(OnClickListener listener) | 右侧点击事件监听 |
showTitleView() | 展示标题 |
hideTitleView() | 隐藏标题 |
showLeft() | 显示左侧 |
showRight() | 显示右侧 |
hideRight() | 隐藏右侧 |
getRightView() | 获取右侧父控件 |
getTitleView() | 获取标题控件 |
getTextRight() | 获取右侧文本控件 |
isWhiteBg() | 是否白色背景 |
isTransparentBg() | 是否透明背景 |
setTitle(int resId) | 设置标题内容 |
setTitle(CharSequence title) | 设置标题内容 |
setRightText(int id) | 设置右侧文字 |
setLeftBackText(CharSequence text) | 设置带返回箭头的文字 |
setRightText(CharSequence text) | 设置右侧文字 |
setLeftText(int id) | 设置左侧文字 |
setLeftText(CharSequence text) | 设置左侧文字 |
setRightIcon(int icon) | 设置右侧图片 |
setLeftIcon(int icon) | 设置左侧图片 |
setRightIcon(Drawable icon) | 设置右侧图片 |
setLeftIcon(Drawable icon) | 设置左侧图片 |
也可以直接引用到项目中
compile 'com.motee:toolbar:1.0.0'