标题栏是Android开发最基础的一个组件,但是应用也多种多样,因为应对需求的多样化,想要做一个万能的标题栏基本是不可能,因此跟大家分享一下自己简易封装的标题栏,并不具备多大含金量,应对于以下一些样式。

1:

2:

3:

4:

5:

其实很好理解,就是左图,左标题,标题,右标题,右图的一些属性设置。

第一步:

在values下面新建attrs文件,设置属性

<?xml version="1.0" encoding="utf-8"?>
<resources><declare-styleable name="TitlebarView"><attr name="leftText" format="string"/><attr name="leftTextColor" format="color"/><attr name="centerTextColor" format="color"/><attr name="centerTitle" format="string"/><attr name="rightTextColor" format="color"/><attr name="rightText" format="string"/><attr name="leftDrawble" format="reference"/><attr name="rightDrawable" format="reference"/></declare-styleable>
</resources>

主要设置内容,颜色,图片等

第二步:

设置标题栏的布局文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/layout_title"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="@android:color/transparent"android:orientation="vertical"><LinearLayout
        android:id="@+id/layout_left"android:layout_width="wrap_content"android:layout_height="match_parent"android:layout_alignParentLeft="true"android:gravity="center"android:orientation="horizontal"android:paddingLeft="@dimen/size_8"android:paddingRight="@dimen/size_8"><ImageView
            android:id="@+id/iv_left"android:layout_width="wrap_content"android:layout_height="wrap_content"android:contentDescription="@null"android:scaleType="centerInside" /><TextView
            android:id="@+id/tv_left"android:layout_width="wrap_content"android:layout_height="wrap_content"android:maxLength="4"android:maxLines="1"android:paddingLeft="@dimen/size_8" /></LinearLayout><TextView
        android:id="@+id/tv_title"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="true"android:gravity="center"android:maxLength="10"android:maxLines="1" /><LinearLayout
        android:id="@+id/layout_right"android:layout_width="wrap_content"android:layout_height="match_parent"android:layout_alignParentRight="true"android:gravity="center"android:paddingLeft="@dimen/size_8"android:paddingRight="@dimen/size_8"><TextView
            android:id="@+id/tv_right"android:layout_width="wrap_content"android:layout_height="wrap_content"android:maxLines="1" /><ImageView
            android:id="@+id/iv_right"android:layout_width="wrap_content"android:layout_height="wrap_content"android:contentDescription="@null"android:scaleType="centerInside" /></LinearLayout>
</RelativeLayout>

这里的布局文件是通用的布局文件,需要对此布局根据自己的需求进行配置,这个就需要自定义View了

第三步:

自定义TitleBar,主要进行引用布局,初始化view,拿到自定义属性进行相应配置

   public TitlebarView(final Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);LayoutInflater.from(context).inflate(R.layout.layout_title, this);initView();TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.TitlebarView, defStyleAttr, 0);int count = array.getIndexCount();for (int i = 0; i < count; i++) {int attr = array.getIndex(i);switch (attr) {case R.styleable.TitlebarView_leftTextColor:tv_left.setTextColor(array.getColor(attr, Color.BLACK));break;case R.styleable.TitlebarView_leftDrawble:iv_left.setImageResource(array.getResourceId(attr, 0));break;case R.styleable.TitlebarView_leftText:tv_left.setText(array.getString(attr));break;case R.styleable.TitlebarView_centerTextColor:tv_title.setTextColor(array.getColor(attr, Color.BLACK));break;case R.styleable.TitlebarView_centerTitle:tv_title.setText(array.getString(attr));break;case R.styleable.TitlebarView_rightDrawable:iv_right.setImageResource(array.getResourceId(attr, 0));break;case R.styleable.TitlebarView_rightText:tv_right.setText(array.getString(attr));break;case R.styleable.TitlebarView_rightTextColor:tv_right.setTextColor(array.getColor(attr, Color.BLACK));break;}}array.recycle();}

然后我们需要添加左侧,右侧的点击事件,由于一般反馈点击范围太小,导致点击灵敏性较差,所以这里全部设置对左侧,右侧布局进行监听,而不是单个控件

设置回调接口

 private onViewClick mClick;public void setOnViewClick(onViewClick click) {this.mClick = click;}public interface onViewClick {void leftClick();void rightClick();}

在调用的时候拿到自定义view对象setOnViewClick即可

全部代码如下:

package com.example.testing.mycustomview;import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Color;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.util.TypedValue;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;/*** Created by Administrator on 2017/7/18.*/public class TitlebarView extends RelativeLayout {private LinearLayout layout_left, layout_right;private TextView tv_left, tv_title, tv_right;private ImageView iv_left, iv_right;private onViewClick mClick;public TitlebarView(Context context) {this(context, null);}public TitlebarView(Context context, AttributeSet attrs) {this(context, attrs, 0);}public TitlebarView(final Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);LayoutInflater.from(context).inflate(R.layout.layout_title, this);initView();TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.TitlebarView, defStyleAttr, 0);int count = array.getIndexCount();for (int i = 0; i < count; i++) {int attr = array.getIndex(i);switch (attr) {case R.styleable.TitlebarView_leftTextColor:tv_left.setTextColor(array.getColor(attr, Color.BLACK));break;case R.styleable.TitlebarView_leftDrawble:iv_left.setImageResource(array.getResourceId(attr, 0));break;case R.styleable.TitlebarView_leftText:tv_left.setText(array.getString(attr));break;case R.styleable.TitlebarView_centerTextColor:tv_title.setTextColor(array.getColor(attr, Color.BLACK));break;case R.styleable.TitlebarView_centerTitle:tv_title.setText(array.getString(attr));break;case R.styleable.TitlebarView_rightDrawable:iv_right.setImageResource(array.getResourceId(attr, 0));break;case R.styleable.TitlebarView_rightText:tv_right.setText(array.getString(attr));break;case R.styleable.TitlebarView_rightTextColor:tv_right.setTextColor(array.getColor(attr, Color.BLACK));break;}}array.recycle();layout_left.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View view) {mClick.leftClick();}});layout_right.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View view) {mClick.rightClick();}});}private void initView() {tv_left = findViewById(R.id.tv_left);tv_title = findViewById(R.id.tv_title);tv_right = findViewById(R.id.tv_right);iv_left = findViewById(R.id.iv_left);iv_right = findViewById(R.id.iv_right);layout_left = findViewById(R.id.layout_left);layout_right = findViewById(R.id.layout_right);}public void setOnViewClick(onViewClick click) {this.mClick = click;}//设置标题public void setTitle(String title) {if (!TextUtils.isEmpty(title)) {tv_title.setText(title);}}//设置左标题public void setLeftText(String title) {if (!TextUtils.isEmpty(title)) {tv_left.setText(title);}}//设置右标题public void setRightText(String title) {if (!TextUtils.isEmpty(title)) {tv_right.setText(title);}}//设置标题大小public void setTitleSize(int size) {if (tv_title != null) {tv_title.setTextSize(TypedValue.COMPLEX_UNIT_SP, size);}}//设置左标题大小public void setLeftTextSize(int size) {if (tv_left != null) {tv_left.setTextSize(TypedValue.COMPLEX_UNIT_SP, size);}}//设置右标题大小public void setRightTextSize(int size) {if (tv_right != null) {tv_right.setTextSize(TypedValue.COMPLEX_UNIT_SP, size);}}//设置左图标public void setLeftDrawable(int res) {if (iv_left != null) {iv_left.setImageResource(res);}}//设置右图标public void setRightDrawable(int res) {if (iv_right != null) {iv_right.setImageResource(res);}}public interface onViewClick {void leftClick();void rightClick();}}

如何引用呢?

<com.example.testing.mycustomview.TitlebarViewandroid:id="@+id/title"android:layout_width="match_parent"android:layout_height="48dp"android:background="@color/colorAccent"app:centerTitle="自定义标题"app:centerTextColor="#FFF"app:leftDrawble="@drawable/ic_write_back"app:leftTextColor="#FFF"app:leftText="返回"app:rightDrawable="@android:drawable/ic_btn_speak_now"app:rightText="语音"app:rightTextColor="#FFF"/>

效果:

代码中调用:

TitlebarView titlebarView= (TitlebarView) findViewById(R.id.title);titlebarView.setTitleSize(20);titlebarView.setTitle("标题栏");titlebarView.setOnViewClick(new TitlebarView.onViewClick() {@Overridepublic void leftClick() {Toast.makeText(MainActivity.this,"左边",Toast.LENGTH_SHORT).show();}@Overridepublic void rightClick() {Toast.makeText(MainActivity.this,"右边",Toast.LENGTH_SHORT).show();}});

效果:

到这里就结束了,基本上可以满足大多数需求

代码链接:
http://pan.baidu.com/s/1qXH7nWg

Android封装一个自定义标题栏相关推荐

  1. android标题栏上增加按钮,Android:向自定义标题栏添加按钮

    我创建了一个自定义标题栏,如本例所示 "一个自定义标题栏" – 一半下来. 在某些活动中,我想在标题栏的右侧放置一个按钮(与facebook app相同).我试图按如下方式向视图添 ...

  2. 关于Android封装一个全局的BaseActivity你需要知道的

    关于Android封装一个全局的BaseActivity你需要知道的 1.前言 2.特点 3.代码及说明 3.1.优缺点 3.2.代码 3.3.注意点 4.总结 5.最后 1.前言 对于一个Andro ...

  3. Android学习之自定义标题栏

    一.如今好多的Android APP都在界面的顶部放置一个标题栏,标题栏里通常会有一两个按钮可用于返回和其它操作,虽然Android系统中已经给每个Activity提供了标题栏功能,但是这里介绍一下我 ...

  4. Android 封装一个通用的PopupWindow

    *本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 先上效果图: 完整代码地址已上传Github:CommonPopupWindow PopupWindow这个类用来实现一个弹出框, ...

  5. android 资源引用 自定义标题栏

    http://blog.sina.com.cn/s/blog_72fad6270100x7k2.html styles.xml放在res/values文件夹中 具体放在哪里,这要深入了解android ...

  6. 安卓文本编辑器php cpp,用安卓原生控件封装一个简易的富文本编辑器

    最近接到项目需求:移动端原生写一个富文本编辑器.        ( ⊙ o ⊙ )从没遇到过富文本要用原生写的,然后就查阅各种资料.然后结合自己的思路:其实安卓的富文本编辑器就是一个 "容器 ...

  7. 【QT 5 设置自定义标题栏+学习:《QT实现鼠标拖动调整窗口大小》+基础样例】

    [QT 5 设置自定义标题栏+学习:<QT实现鼠标拖动调整窗口大小>+基础样例] 1.说明 2.实验环境 3.实验目的 4.参考文章 5.实验步骤 (1)下载代码,运行没有错误. (2)加 ...

  8. android分享的主标题,Android 自定义标题栏(title栏)

    近日 需要在android的标题栏上添加按钮,所以对android的标题栏进行了一下简单的研究- 第一步,向实现自定义标题栏,需要在onCreate方法里这样写 requestWindowFeatur ...

  9. android 标题栏进度圈使用方法,Android 自定义标题栏 显示网页加载进度的方法实例...

    这阵子在做Lephone的适配,测试组提交一个bug:标题栏的文字较长时没有显示完全,其实这并不能算个bug,并且这个问题在以前其他机器也没有出现,只是说在Lephone的这个平台上显示得不怎么美观, ...

  10. 浅谈android中的自定义封装易用的Dialog

    转载地址:http://blog.csdn.net/u013064109/article/details/51990526 好久没写Android的博客,最近在做一个android的项目,里面用到我们 ...

最新文章

  1. github一些常见命令
  2. 【Java基础】序列化之serialVersionUID
  3. 【项目管理】聊聊项目管理几点实践和理解(1)
  4. python字典定义方式_Python字典常用方法及汇总
  5. cv mat的shape_将ndarray转换为cv::Mat的最简单方法是什么?
  6. mysql 8创建远程访问用户以及连接mysql速度慢的解决方法
  7. Robot framework之元素定位实战
  8. maya藤蔓插件_用maya制作藤蔓蔓延的效果
  9. ssm教培管理系统毕业设计源码230932
  10. 2019计蒜之道初赛第一场 A 商汤的AI伴游小精灵(DFS)
  11. springboot下,上传PPT文件转pdf再转图片
  12. vscode 用户设置与工作区设置
  13. c语言while延时10ms,for循环实现C语言精确延时
  14. Facebook 是神经制封号 还是有规则的封号?
  15. 五、使用Python操作数据库
  16. 微博运营工具及数据分析实战全集百度云
  17. IT时代,为什么要学习UI设计
  18. 那些年我们在python掉进的坑系列之一pandas的to_sql
  19. 手机费用查询2007.3~7
  20. wps插入visio流程图

热门文章

  1. Android onKeyDown事件 监听不到Home键 可以监听到back键
  2. 国家级精品课程 电子资源 网址
  3. 墨天轮沙龙 | 东方通张唐:东方通中间件助力信创发展
  4. Javascript 如何实现继承?
  5. ubuntu搜狗拼音输入法无法切换英文
  6. Excel 快捷键大全
  7. 计算机桌面个性化怎样设置方法,终于知晓如何设置个性化电脑桌面?
  8. BlendMask知识点记录
  9. Zookeeper(1)-概述
  10. 机器学习资料与攻略超强整理吐血推荐(二)