小编使用的是newBaseLib开源库, 原项目GitHub地址:传送门
顶部的菜单栏现在在项目中几乎是不可或缺的,但是要自己去写一个,不说开发时间,对于现在快速开发来说,基本想都别想,不要重复造轮子、不要重复造轮子、不要重复造轮子
image.png
在xml中
<com.wb.baselib.view.TopBarView
tv:titleBarColor="color" // 标题栏背景颜色
titlebar:fillStatusBar="boolean" // 填充状态栏,true时,标题栏会创建一块和系统状态栏同高的视图,用于沉浸式标题栏
tv:statusBarColor="color" // 使用沉浸式标题栏时,标题栏显示的颜色
tv:titleBarHeight="dimension" // 标题栏高度
tv:showBottomLine="boolean" // 是否显示标题栏底部的分割线
tv:bottomLineColor="color" // 标题栏分割线颜色
tv:bottomShadowHeight="dimension" // 底部阴影高度 showBottomLine = false时有效
tv:leftType="none|textView|imageButton|customView" // 左侧视图类型:无|文字|按钮|自定义视图
tv:leftText="string" // 左侧文字leftType= textView有效
tv:leftTextColor="color" // 左侧文字颜色
tv:leftTextSize="dimension" // 左侧文字大小
tv:leftDrawable ="reference" // leftType= textView时,对应的drawableLeft图片
tv:leftDrawablePadding="dimension" // leftType= textView时,对应的drawablePadding
tv:leftImageResource="reference" // leftType= imageButton时,左侧按钮对应的图片资源引用
tv:leftCustomView ="reference" // leftType= customView时,左侧布局资源引用
tv:rightType="none|textView|imageButton|customView" // 右侧视图类型:无|文字|按钮|自定义视图
tv:rightText="string" // 右侧文字rightType= textView有效
tv:rightTextColor="color" // 右侧文字颜色
tv:rightTextSize="dimension" // 右侧文字大小
tv:rightImageResource="reference" // rightType= imageButton时,右侧按钮对应的图片资源引用
tv:rightCustomView="reference" // rightType= customView时,右侧布局资源引用
tv:centerType="none|textView|searchView|customView" // 中间视图类型:无|文字|搜索框|自定义视图
tv:centerSearchRightType="voice|delete" // 搜索框右侧按钮类型:语音按钮|删除按钮
tv:centerText="string" // 标题文字centerType = textView有效
tv:centerTextColor="color" // 标题文字颜色
tv:centerTextSize="dimension" // 标题文字大小
tv:centerSubText="string" // 副标题文字
tv:centerSubTextColor="color" // 副标题文字颜色
tv:centerSubTextSize="dimension" // 副标题文字大小
tv:centerSearchEdiable="boolean" // 搜索框是否可以输入,对应centerType =searchView
tv:centerSearchBg="reference" // 搜索框背景
tv:centerCustomView="reference"/> // 中间自定义视图
在使用布局声明的时候,这里特别说明几点,以免出现问题,命名空间大家都懂需要声明xmlns:tv="http://schemas.android.com/apk/res-auto",不声明,属性是不会出来的哟~~~~
另外 tv:fillStatusBar="false" 这个属性特别注意下,如果声明false那么就不会再标题栏上面多一个状态栏的高度,如果为true的话就会多一个状态栏高度,为什么这么做呢?有人会问,其实原因很简单,因为沉淀式状态栏的问题,具体是为true还是为false根据使用场景来决定~
标题栏的监听事件
titleBar.setListener(new CommonTitleBar.OnTitleBarListener() {
@Override
public void onClicked(View v, int action, String extra) {
if (action == TopBarView.ACTION_LEFT_TEXT) {
...
}
// TopBarView.ACTION_LEFT_TEXT; // 左边TextView被点击
// TopBarView.ACTION_LEFT_BUTTON; // 左边ImageBtn被点击
// TopBarView.ACTION_RIGHT_TEXT; // 右边TextView被点击
// TopBarView.ACTION_RIGHT_BUTTON; // 右边ImageBtn被点击
// TopBarView.ACTION_SEARCH; // 搜索框被点击,搜索框不可输入的状态下会被触发
// TopBarView.ACTION_SEARCH_SUBMIT; // 搜索框输入状态下,键盘提交触发,此时,extra为输入内容
// TopBarView.ACTION_SEARCH_VOICE; // 语音按钮被点击
// TopBarView.ACTION_SEARCH_DELETE; // 搜索删除按钮被点击
// TopBarView.ACTION_CENTER_TEXT; // 中间文字点击
}
});
如果是自定义的样式
View rightCustomLayout = titleBar.getRightCustomView();
rightCustomLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
// 布局child view添加监听事件
rightCustomLayout.findViewById(R.id.子控件ID).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
如果出现全屏与键盘的冲突导致的键盘被遮挡问题,请在Activity.onAttachedToWindow()方法中加入如下代码
@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
KeyboardConflictCompat.assistWindow(getWindow());
}
这样一个通用的标题栏完成了
如果有问题再github上提交bug,这个库将持续维护下去
网友评论