Android通用标题栏

每个App里面都少不了标题栏,我们一般怎么使用的呢?大部分都是在布局文件中去写布局,或者是使用ActionBar,ToolBar,有些时候,总是达不到我们的要求,因此我就和大家分享一下自己定制的一款万能的通用的标题栏,我们采用的是Builder设计模式,同时也是模仿系统Dialog的Builder设计模式来写的。

我们先看一下效果:


首先定义一个接口,用来规范:

  1. public interface ITitleBar {
  2. // 头部的规范
  3. public int bindLayoutId();
  4. // 绑定头部的参数
  5. public void applyView();
  6. }


而后标题栏的基类实现我们的接口:

  1. private P mParams;
  2. private View mTitleBarView;
  3. public BaseTitleBar(P params) {
  4. this.mParams = params;
  5. createAndBindView();
  6. }
  7. /**
  8. * 设置文本
  9. * @param viewId
  10. * @param text
  11. */
  12. protected void setText(int viewId, String text) {
  13. TextView tv = findViewById(viewId);
  14. if(!TextUtils.isEmpty(text)){
  15. tv.setVisibility(View.VISIBLE);
  16. tv.setText(text);
  17. }
  18. }
  19. /**
  20. * 标题栏颜色设置
  21. * @param viewId
  22. * @param titleBarColor
  23. */
  24. protected void setTitleBarColor(int viewId, int titleBarColor) {
  25. RelativeLayout relativeLayout = findViewById(viewId);
  26. if(titleBarColor!= 0){
  27. relativeLayout.setBackgroundColor(mParams.mContext.getResources().getColor(titleBarColor));
  28. }
  29. }
  30. /**
  31. * 设置文字颜色
  32. * @param viewId
  33. * @param textColor
  34. */
  35. protected void setTextColor(int viewId, int textColor) {
  36. TextView tv = findViewById(viewId);
  37. if(textColor!= 0){
  38. tv.setTextColor(mParams.mContext.getResources().getColor(textColor));
  39. }
  40. }
  41. /**
  42. * 设置icon
  43. * @param viewId
  44. * @param res
  45. */
  46. protected void setIcon(int viewId,int res){
  47. ImageView iv = findViewById(viewId);
  48. if (res!= 0){
  49. iv.setVisibility(View.VISIBLE);
  50. iv.setImageResource(res);
  51. }
  52. }
  53. /**
  54. * 设置点击
  55. * @param viewId
  56. * @param listener
  57. */
  58. protected void setOnClickListener(int viewId,View.OnClickListener listener){
  59. findViewById(viewId).setOnClickListener(listener);
  60. }
  61. /**
  62. * 绑定和创建View
  63. */
  64. private void createAndBindView() {
  65. //创建View
  66. if(mParams.mParent == null){
  67. // 获取activity的根布局
  68. ViewGroup activityRoot = (ViewGroup) ((Activity)(mParams.mContext))
  69. .findViewById(android.R.id.content);
  70. mParams.mParent = (ViewGroup) activityRoot.getChildAt( 0);
  71. }
  72. if(mParams.mParent == null){
  73. return;
  74. }
  75. mTitleBarView = LayoutInflater.from(mParams.mContext).
  76. inflate(bindLayoutId(), mParams.mParent, false);
  77. //添加
  78. mParams.mParent.addView(mTitleBarView, 0);
  79. applyView();
  80. }
  81. public <T extends View> T findViewById(int viewId){
  82. return (T)mTitleBarView.findViewById(viewId);
  83. }
  84. public P getParams() {
  85. return mParams;
  86. }
  87. // Builder仿照系统写的dialo就是这样,参数Params
  88. public abstract static class Builder {
  89. public Builder(Context context, ViewGroup parent) {
  90. }
  91. public abstract BaseTitleBar builder();
  92. public static class BaseTitleBarParams {
  93. public Context mContext;
  94. public ViewGroup mParent;
  95. public BaseTitleBarParams(Context context, ViewGroup parent) {
  96. this.mContext = context;
  97. this.mParent = parent;
  98. }
  99. }
  100. }

下面是我们的自己的标题栏

  1. public CommonTitleBar(CommonTitleBar.Builder.CommonTitleBarParams params) {
  2. super(params);
  3. }
  4. @Override
  5. public int bindLayoutId() {
  6. return R.layout.title_bar;
  7. }
  8. @Override
  9. public void applyView() {
  10. // 绑定效果
  11. setTitleBarColor(R.id.title_bar, getParams().mTitleBarColor);
  12. setText(R.id.left_tv, getParams().mLeftText);
  13. setTextColor(R.id.left_tv, getParams().mLeftTextColor);
  14. setIcon(R.id.left_icon, getParams().mLeftIconRes);
  15. setText(R.id.title, getParams().mTitle);
  16. setTextColor(R.id.title, getParams().mTitleColor);
  17. setIcon(R.id.title_icon, getParams().mTitleIconRes);
  18. setText(R.id.right_text, getParams().mRightText);
  19. setTextColor(R.id.right_text, getParams().mRightTextColor);
  20. setIcon(R.id.right_icon, getParams().mRightIconRes);
  21. // 左边 要写一个默认的 finishActivity
  22. setOnClickListener(R.id.left_icon, getParams().mLeftClickListener);
  23. setOnClickListener(R.id.left_tv, getParams().mLeftClickListener);
  24. setOnClickListener(R.id.title, getParams().mCenterClickListener);
  25. setOnClickListener(R.id.title_icon, getParams().mCenterClickListener);
  26. setOnClickListener(R.id.right_text, getParams().mRightClickListener);
  27. setOnClickListener(R.id.right_icon, getParams().mRightClickListener);
  28. }
  29. public static class Builder extends BaseTitleBar.Builder {
  30. CommonTitleBarParams P;
  31. public Builder(Context context, ViewGroup parent) {
  32. super(context, parent);
  33. P = new CommonTitleBarParams(context, parent);
  34. }
  35. public Builder(Context context) {
  36. super(context, null);
  37. P = new CommonTitleBarParams(context, null);
  38. }
  39. @Override
  40. public CommonTitleBar builder() {
  41. CommonTitleBar commonTitleBar = new CommonTitleBar(P);
  42. return commonTitleBar;
  43. }
  44. //设置所有效果
  45. /**
  46. * 标题栏颜色设置
  47. * @param color
  48. * @return
  49. */
  50. public CommonTitleBar. Builder setTitleBarColor(int color) {
  51. P.mTitleBarColor = color;
  52. return this;
  53. }
  54. /**
  55. * 设置左边文字
  56. *
  57. * @param leftText
  58. * @return
  59. */
  60. public CommonTitleBar. Builder setLeftText(String leftText) {
  61. P.mLeftText = leftText;
  62. return this;
  63. }
  64. /**
  65. * 设置左边文字颜色
  66. *
  67. * @param color
  68. * @return
  69. */
  70. public CommonTitleBar. Builder setLeftTextColor(int color) {
  71. P.mLeftTextColor = color;
  72. return this;
  73. }
  74. /**
  75. * 设置左边的图片
  76. */
  77. public CommonTitleBar. Builder setLeftIcon(int leftIconRes) {
  78. P.mLeftIconRes = leftIconRes;
  79. return this;
  80. }
  81. /**
  82. * 设置标题
  83. *
  84. * @param title
  85. * @return
  86. */
  87. public CommonTitleBar. Builder setTitle(String title) {
  88. P.mTitle = title;
  89. return this;
  90. }
  91. /**
  92. * 设置标题颜色
  93. *
  94. * @param color
  95. * @return
  96. */
  97. public CommonTitleBar. Builder setTitleColor(int color) {
  98. P.mTitleColor = color;
  99. return this;
  100. }
  101. /**
  102. * 设置中间的图标
  103. *
  104. * @param titleIconRes
  105. * @return
  106. */
  107. public CommonTitleBar. Builder setTitleIcon(int titleIconRes) {
  108. P.mTitleIconRes = titleIconRes;
  109. return this;
  110. }
  111. /**
  112. * 设置右边文字
  113. *
  114. * @param rightText
  115. * @return
  116. */
  117. public CommonTitleBar. Builder setRightText(String rightText) {
  118. P.mRightText = rightText;
  119. return this;
  120. }
  121. /**
  122. * 设置右边文字颜色
  123. *
  124. * @param color
  125. * @return
  126. */
  127. public CommonTitleBar. Builder setRightTextColor(int color) {
  128. P.mRightTextColor = color;
  129. return this;
  130. }
  131. /**
  132. * 设置右边的图片
  133. */
  134. public CommonTitleBar. Builder setRightIcon(int rightRes) {
  135. P.mRightIconRes = rightRes;
  136. return this;
  137. }
  138. /**
  139. * 设置左边的点击事件
  140. */
  141. public CommonTitleBar. Builder
  142. setLeftClickListener (View.OnClickListener leftListener) {
  143. P.mLeftClickListener = leftListener;
  144. return this;
  145. }
  146. /**
  147. * 设置中间的点击事件
  148. */
  149. public CommonTitleBar. Builder setTitleClickListener(View.OnClickListener titleListener) {
  150. P.mCenterClickListener = titleListener;
  151. return this;
  152. }
  153. /**
  154. * 设置右边的点击事件
  155. */
  156. public CommonTitleBar. Builder setRightClickListener(View.OnClickListener rightListener) {
  157. P.mRightClickListener = rightListener;
  158. return this;
  159. }
  160. public static class CommonTitleBarParams extends
  161. BaseTitleBar. Builder. BaseTitleBarParams {
  162. // 所有效果放置
  163. public String mLeftText; //左边文字
  164. public int mLeftTextColor; //左边文字颜色
  165. public int mLeftIconRes; //左边图片
  166. public int mTitleBarColor; //标题栏颜色
  167. public String mTitle; //标题
  168. public int mTitleColor; //标题颜色
  169. public int mTitleIconRes; //标题图片
  170. public String mRightText; //右边文字
  171. public int mRightTextColor; //右边文字颜色
  172. public int mRightIconRes; //右边图片
  173. // 后面还有一些通用的
  174. public View.OnClickListener mRightClickListener;
  175. public View.OnClickListener mCenterClickListener;
  176. public View.OnClickListener mLeftClickListener = new View.OnClickListener() {
  177. @Override
  178. public void onClick(View v) {
  179. // 关闭当前Activity
  180. ((Activity) mContext).finish();
  181. }
  182. };
  183. public CommonTitleBarParams(Context context, ViewGroup parent) {
  184. super(context, parent);
  185. }
  186. }
  187. }

主要功能:

* CommonTitleBar使用,分别有左图标,左边文字
*                          中间标题 中间图标
*                          右边图标 右边文字
*                          不设置文字或者不设置图片资源 图表或者文字为gone
*                          左边图标默认设置了点击事件为关闭当前页面 根据需要进行处理
 

使用:

CommonTitleBar titleBar = new CommonTitleBar.Builder(this)
         .setTitleBarColor(R.color.blue)
        .setLeftText("左边标题")
        .setLeftTextColor(R.color.red)
        .setLeftIcon(R.drawable.iv_back_arrow_white)
        .setLeftClickListener(this)
        .setTitle("投稿")
        .setTitleColor(R.color.white)
        .setTitleIcon(R.drawable.iv_mine_on)
        .setTitleClickListener(this)
        .setRightText("分享")
        .setRightTextColor(R.color.colorAccent)
        .setRightIcon(R.drawable.iv_more_blue)
        .setRightClickListener(this)
        .builder();

无需在布局中去加载既可以用,附上github地址:点击打开链接

              

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值