基础库----------顶部的标题栏

2018-06-05  本文已影响69人  就这样风流

小编使用的是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,这个库将持续维护下去

上一篇下一篇

猜你喜欢

热点阅读