allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
dependencies {
implementation 'com.github.FlyJingFish:TitleBar:1.2.8'
}
以下是TitleBar的结构
状态栏背景区域,如果页面没有设置全屏会看不到的。当然不论是否设置全屏,TitleBar的标题返回按钮一栏都会从状态栏以下开始显示
1、全局设置(必须放在 app 模块下,否则可能不起效果)
加入以下设置可实现全局设置
<resources>
<!-- TitleBar 最小高度 -->
<dimen name="title_bar_minHeight">50dp</dimen>
<!-- 返回图片宽度 -->
<dimen name="title_bar_backView_width">20dp</dimen>
<!-- 返回图片高度 -->
<dimen name="title_bar_backView_height">20dp</dimen>
<!-- 返回图片距离左侧距离 -->
<dimen name="title_bar_backView_marginStart">12dp</dimen>
<!-- 返回图片距离右侧距离 -->
<dimen name="title_bar_backView_marginEnd">12dp</dimen>
<!-- 右侧ImageView图片宽度 -->
<dimen name="title_bar_rightImageview_width">20dp</dimen>
<!-- 右侧ImageView图片高度 -->
<dimen name="title_bar_rightImageview_height">20dp</dimen>
<!-- 右侧View图片距离左侧距离 -->
<dimen name="title_bar_rightView_marginStart">15dp</dimen>
<!-- 右侧View图片距离右侧距离 -->
<dimen name="title_bar_rightView_marginEnd">15dp</dimen>
<!-- 标题大小 -->
<dimen name="title_bar_title_textSize">16sp</dimen>
<!-- 标题颜色 -->
<color name="title_bar_title_textColor">#000000</color>
<!-- 右侧TextView 字体大小 -->
<dimen name="title_bar_rightTextView_textSize">16sp</dimen>
<!-- 右侧TextView 字体颜色 -->
<color name="title_bar_rightTextView_textColor">#000000</color>
<!-- shadow 颜色 -->
<color name="title_bar_shadow_default_color">#4d000000</color>
<!-- shadow 高度 -->
<dimen name="title_bar_shadow_default_height">1dp</dimen>
<!-- 左侧TextView 字体大小 -->
<dimen name="title_bar_backTextView_textSize">16sp</dimen>
<!-- 左侧TextView 字体颜色 -->
<color name="title_bar_backTextView_textColor">#000000</color>
</resources>
2、方法说明
方法 | 方法说明 |
---|---|
attachToWindow | 加入到页面 Window 层(如果你直接写在页面布局上,不要调用这一句) |
setAboveContent | TitleBar 是否在内容上边,调用 attachToWindow 才有效(true则TitleBar和布局成上下结构,false则TitleBar覆盖在布局上方) |
getTitleView | 获取标题 TextView |
setTitle | 设置标题 |
setTitleColor | 设置标题颜色 |
setTitleGravity | 设置标题位置(左中右) |
setShadow | 设置底部 Shadow 样式 |
setDisplayShadow | 是否显示 Shadow |
setCustomView | 设置自定义View(这里替换的是中间标题那部分,如果左右两侧的View隐藏,则会覆盖全部区域) |
getBackView | 获取返回按钮 ImageView (已废弃) |
getBackTextView | 获取左侧 TextView (获取后 左侧 ImageView 就移除了,两者只可以存在一个) |
getBackImageView | 获取左侧 ImageView (获取后 左侧 TextView 就移除了,两者只可以存在一个) |
setCustomLeftView | 设置左侧自定义View(会替换返回按钮) |
setDisplayLeftView | 设置是否显示左侧View(通常是指返回按钮) |
getRightTextView | 获取右侧 TextView (获取后 右侧 ImageView 就移除了,两者只可以存在一个) |
getRightImageView | 获取右侧 ImageView (获取后 右侧 TextView 就移除了,两者只可以存在一个) |
setCustomRightView | 设置右侧自定义View(一个图片或一个文本的按钮不够用则用这个) |
setDisplayRightView | 设置是否显示右侧View |
setTitleBarBackgroundWithStatusBar | 设置标题栏背景「包含」状态栏 |
setTitleBarBackgroundResourceWithStatusBar | 设置标题栏背景「包含」状态栏 |
setTitleBarBackgroundColorWithStatusBar | 设置标题栏背景「包含」状态栏 |
setTitleBarBackground | 设置标题栏背景「不包含」状态栏 |
setTitleBarBackgroundResource | 设置标题栏背景「不包含」状态栏 |
setTitleBarBackgroundColor | 设置标题栏背景「不包含」状态栏 |
setStatusBarBackground | 设置状态栏背景(如果不设置全屏或透明状态栏是看不到的) |
setStatusBarBackgroundResource | 设置状态栏背景(如果不设置全屏或透明状态栏是看不到的) |
setStatusBarBackgroundColor | 设置状态栏背景(如果不设置全屏或透明状态栏是看不到的) |
getTitleBarStatusBar | 获取状态栏ImageView |
setOnBackViewClickListener | 设置返回点击监听 |
setOnBackViewLongClickListener | 设置返回长按监听 |
setOnRightViewClickListener | 设置右侧点击监听 |
setOnRightViewLongClickListener | 设置右侧长按监听 |
show | 显示 TitleBar |
hide | 隐藏 TitleBar |
getTitleBarLayoutParams | 如果需要用到 getLayoutParams 方法,建议改用这个,详细说明可看代码中的方法说明 |
setTitleBarLayoutParams | 如果需要用到 setLayoutParams 方法,建议改用这个,详细说明可看代码中的方法说明 |
setRealLayoutParams | 給TitleBar设置实际的 LayoutParams 参数,详细说明看方法说明 |
setLayoutParams | 此方法已被改写为实际调用 setTitleBarLayoutParams ,且被标记为弃用 |
getLayoutParams | 此方法没有改写逻辑只是被标记为弃用 |
getShadowHeight | 获取shadow 的高度 |
getStatusBarViewHeight | 获取状态栏的高度 |
getTitleBarHeight | 获取TitleBar总高度,这个高度是包含状态栏,shadow和返回按钮一栏的总高度 |
3、布局中属性一览
attr | format | description |
---|---|---|
title_bar_title | string | 标题 |
title_bar_back_type | enum | 左侧是文本还是图片 |
title_bar_back_src | reference/color | 返回按钮资源图 |
title_bar_back_text | string | 返回按钮文本 |
title_bar_right_type | enum | 右侧是文本还是图片 |
title_bar_right_src | reference/color | 右侧按钮资源图 |
title_bar_right_text | string | 右侧文本 |
title_bar_title_gravity | enum | 标题位置 |
title_bar_shadow_type | enum | shadow类型 |
title_bar_shadow | reference/color | shadow颜色或资源图 |
title_bar_shadow_height | dimension | shadow高度 |
android:background(即原生属性) | reference/color | 返回栏(不包含状态栏)背景 |
title_bar_background_with_status_bar | reference/color | 返回栏(包含状态栏)背景 |
title_bar_status_bar_background | reference/color | 状态栏区域背景 |
title_bar_back_textView_style | reference | 左侧文本样式style |
title_bar_back_imageView_style | reference | 左侧图片样式style |
title_bar_right_textView_style | reference | 右侧文本样式style |
title_bar_right_imageView_style | reference | 右侧图片样式style |
title_bar_back_view_style | reference | 返回图片样式style |
title_bar_title_style | reference | 标题样式style |
title_bar_back_layout | reference | 左侧自定义View的layout |
title_bar_title_layout | reference | 中间自定义View的layout |
title_bar_right_layout | reference | 右侧自定义View的layout |
1、直接在基础Activity 中使用(不需要在布局中添加了,十分推荐这个方式)
public class BaseActivity extends AppCompatActivity {
protected TitleBar titleBar;
public boolean isShowTitleBar(){
return true;
}
public String getTitleString(){
return "";
}
public boolean titleAboveContent(){
return true;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
titleBar = new TitleBar(this);
titleBar.setShadow(4, Color.parseColor("#406200EE"), TitleBar.ShadowType.GRADIENT);
titleBar.setTitleGravity(TitleBar.TitleGravity.CENTER);
titleBar.setOnBackViewClickListener(v -> finish());
if (isShowTitleBar()){
titleBar.show();
}else {
titleBar.hide();
}
titleBar.setTitle(getTitleString());
titleBar.setAboveContent(titleAboveContent());
titleBar.attachToWindow();//这句只用在TitleBar未加入到页面上时使用
}
}
2、在布局中使用
定义右侧文本样式
<style name="right_text_style" >
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_marginStart">4dp</item>
<item name="android:layout_marginEnd">4dp</item>
<item name="android:layout_gravity">center_horizontal|top</item>
<item name="android:textSize">20sp</item>
<item name="android:textColor">@color/teal_200</item>
<item name="android:textStyle">bold|italic</item>
</style>
定义右侧图片样式
<style name="right_image_style">
<item name="android:layout_width">60dp</item>
<item name="android:layout_height">30dp</item>
<item name="android:layout_marginEnd">30dp</item>
<item name="android:src">@drawable/ic_pay_suc_vip</item>
<item name="android:scaleType">centerCrop</item>
</style>
定义返回按钮样式
<style name="back_style">
<item name="android:layout_width">20dp</item>
<item name="android:layout_height">20dp</item>
<item name="android:layout_marginStart">10dp</item>
<item name="android:layout_marginEnd">10dp</item>
<item name="android:scaleType">centerCrop</item>
</style>
定义标题样式
<style name="title_style" >
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_marginStart">4dp</item>
<item name="android:layout_marginEnd">4dp</item>
<item name="android:layout_gravity">center_horizontal|top</item>
<item name="android:textSize">20sp</item>
<item name="android:textColor">@color/purple_700</item>
<item name="android:textStyle">bold</item>
<item name="android:text">200</item>
</style>
布局中使用
<com.flyjingfish.titlebarlib.TitleBar
android:id="@+id/title_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:title_bar_right_textView_style="@style/right_text_style"
app:title_bar_title_style="@style/title_style"
app:title_bar_right_imageView_style="@style/right_image_style"
app:title_bar_back_imageView_style="@style/back_style"
app:title_bar_title_layout="@layout/layout_title"
app:title_bar_title="4444"
app:title_bar_back_src="@mipmap/ic_launcher_round"
app:title_bar_right_type="image"
app:title_bar_right_text="3333"
app:title_bar_title_gravity="center"
app:title_bar_shadow_height="4dp"
app:title_bar_shadow="@color/purple_700"
app:title_bar_shadow_type="gradient"
android:background="@color/teal_700"/>