文章转自 CoderAbsolom  的 http://blog.csdn.net/qq_14923661/article/details/52003447

写在前面:

标题栏这个部分,绝大多数App都有,起到一个概括本页面功能的作用,有些标题栏还具有返回上一页等额外功能。

在这里不得不表扬一下苹果的标题栏位设计,简洁美观实用,很有借鉴性

一、项目结构

            

           主要由一个布局文件activity_title.xml和一个构造类TitleBuilder.java组成,布局文件定义标题栏样式,构造类负责设定文字内容,是否显示返回按钮等等。

二、代码设计 

activity_title.xml 由一个绝对布局包裹两个图片控件和一个文本框控件组成

此处使用线性布局嵌套绝对布局,使内容可以更好地居中显示

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:background="#1B77A8"
android:gravity="center_vertical"
android:layout_width="match_parent"
android:layout_height="50dp">
<RelativeLayout
android:id="@+id/title_bar"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:layout_centerVertical="true"
android:visibility="gone"
android:id="@+id/title_leftIco"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/title_text"
android:textSize="20sp"
android:textColor="#ffffff"
android:layout_centerInParent="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<ImageView
android:visibility="gone"
android:id="@+id/title_rightIco"
android:layout_alignParentRight="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</RelativeLayout>
</LinearLayout>

TitleBuilder.java

    /**
* Created by PanZhe on 2016/7/22.
*/
public class TitleBuilder {
private View titleView;
private RelativeLayout titleBar;
private TextView text;
private ImageView leftIco;
private ImageView rightIco; /**
* 构造方法:用于获取对象
* */
public TitleBuilder(Activity context){
titleView = context.findViewById(R.id.title_bar);
text = (TextView)titleView.findViewById(R.id.title_text);
titleBar = (RelativeLayout)titleView.findViewById(R.id.title_bar);
leftIco = (ImageView)titleView.findViewById(R.id.title_leftIco);
rightIco = (ImageView)titleView.findViewById(R.id.title_rightIco);
} /**
* 用于设置标题栏文字
* */
public TitleBuilder setTitleText(String titleText){
if(!TextUtils.isEmpty(titleText)){
text.setText(titleText);
}
return this;
} /**
* 用于设置标题栏左边要显示的图片
* */
public TitleBuilder setLeftIco(int resId){
leftIco.setVisibility(resId > 0 ? View.VISIBLE : View.GONE);
leftIco.setImageResource(resId);
return this;
} /**
* 用于设置标题栏右边要显示的图片
* */
public TitleBuilder setRightIco(int resId){
rightIco.setVisibility(resId > 0 ? View.VISIBLE : View.GONE);
rightIco.setImageResource(resId);
return this;
} /**
* 用于设置标题栏左边图片的单击事件
* */
public TitleBuilder setLeftIcoListening(View.OnClickListener listener){
if(leftIco.getVisibility() == View.VISIBLE){
leftIco.setOnClickListener(listener);
}
return this;
} /**
* 用于设置标题栏右边图片的单击事件
* */
public TitleBuilder setRightIcoListening(View.OnClickListener listener){
if(rightIco.getVisibility() == View.VISIBLE){
rightIco.setOnClickListener(listener);
}
return this;
}
}

三、使用方法

   在需要的地方引入

    <include layout="@layout/activity_title"/>  

在java代码中使用new方法循环设置参数

    public class MainActivity extends AppCompatActivity {  

        @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); new TitleBuilder(this).setTitleText("测试标题").setLeftIco(R.drawable.left).setLeftIcoListening(leftReturnListener);
} private View.OnClickListener leftReturnListener = new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
};
}

四、效果图

中规中矩,对不对?
大家可以通过修改TitleBuild构造类中的方法来实现自己满意的效果,在这里就不一一列举了

(转)Android开发之封装标题栏的更多相关文章

  1. Android开发-取消程序标题栏或自定义标题栏

    注:本文由Colin撰写,版权所有!转载请注明原文地址,谢谢合作! 在Android开发中,跟据需要我们有时候需要自定义应用程序的标题栏或者取消程序的标题栏,下面本菜鸟在此记录与分享一下自己使用的方法 ...

  2. Android开发如何去除标题栏title(转)

    去除标题栏title其实非常简单,他有两种方法,一种是在代码中添加,另一种是在AndroidManifest.xml中添加: 1.在代码中实现:在此方法setContentView(R.layout. ...

  3. Android开发如何去除标题栏title

    虽然是一个小问题,今天遇到了,也就写下来吧.防止自己忘掉. 取消标题栏的方式有两种,一种是在代码添加,另一种是在AndroidManifest.xml里面添加. 1.在代码中实现:在此方法setCon ...

  4. Android开发之去掉标题栏的三种方法,推荐第三种

    Android:去掉标题栏的三种方法和全屏的三种方法 第一种:一般入门的时候常常使用的一种方法 onCreate函数中增加下面代码: requestWindowFeature(Window.FEATU ...

  5. Android开发之封装log打印日志的工具类,实用logutils详细代码

    public final class LogUtil { /** all Log print on-off */ private final static boolean all = true; /* ...

  6. android 开发 - 使用okhttp框架封装的开发框架

    概述 在android开发中经常要访问网络,目前最流行的网络访问框架就是Okhttp了,然而我们在具体使用时,往往仍然需要二次封装.我使用Builder设计模式进行了封装形成oknet开源库. 介绍 ...

  7. Android开发--去掉标题栏

    Android开发中为了尽可能美观,会去掉标题栏.去掉标题栏有三种方法. 一.在Activity代码里实现 在代码中实现以下方法: this.requestWindowFeature(Window.F ...

  8. android 开发 使用自定义布局实现标题栏复用(标题栏内容自定义:使用代码实现和xml布局自定义属性2种办法实现)

    在个人学习的情况下可能很少使用自定义布局去实现大量复用的情况下,但是在一个开发工作的环境下就会使用到大量复用的自定义控件. 实现思维: 1.写一个xml的布局,用于标题栏的样式,并且添加在标题栏中你想 ...

  9. 史上最全系列Android开发环境搭建

    一.安装JDK1.JDK下载打开网站http://www.oracle.com/technetwor ... nloads-1880260.html,选择相应的操作系统下载JDK 2.安装JDK本机是 ...

随机推荐

  1. Java 分页与原理(上)

    Java web 实习需要用到分页技术 所以现在学习一下 做个记录 方便以后查阅 分类:传统分页技术 下拉式分页技术 起始位置(0)开始 查询(10条记录)

  2. ArcGIS案例学习笔记-找出最近距离的垂线

    ArcGIS案例学习笔记-找出最近距离的垂线 联系方式:谢老师,135-4855-4328,xiexiaokui@qq.com 目的:对于任意矢量要素类,查找最近距离并做图 数据: 方法: 0. 计算 ...

  3. CMake Error at cmake/OpenCVUtils.cmake

    CMake Error at cmake/OpenCVUtils.cmake:1047 (message): Failed to download . Status= Call Stack (most ...

  4. 指向字符串的指针和char类型的数组

    指针数组的效率比二维字符数组的效率高 指针数组不能修改字符串字面量,而二维字符数组中的内容可以更改

  5. cakePHP 分页栏

    <div class="page"><?php if ($total > 1) echo $this->element('page_list', ar ...

  6. JXS In Depth

    [JXS In Depth] 1.Spread Attributes If you already have props as an object, and you want to pass it i ...

  7. MVC002之获取当前用户失败(Context.User.Identity.Name)

    通过Context.User.Identity.Name想获取当前用户的域帐号信息(如:Greatwall\Snow) 可值等于"",什么原因呢. 该问题和MVC关系不大,主要是I ...

  8. day15模块内容

    1.生成器表达式 先说三元表达式如下 res = [i for i in range(10) if 1 > 5] 这样res就是一个列表6,7,8,9] 只要在这个基础上稍加调整,如下 方括号改 ...

  9. dbcp第一次获取连接的时间问题

    最近优化代码,发现第一次调用数据库连接时非常慢,往后便不再发生.经了解,数据库连接是用dbcp管理的,想在网上查找答案,但没有找到.在某人的提醒下决定研究源代码: 部分源代码如下(BasicDataS ...

  10. 【scrapy】关于xpath helper中能匹配,但是在程序里匹配为none的问题

    原本使用xpath helper匹配的时候还是好好的,然鹅,把这个.//*[@id='novelInfo']/table/tbody/tr[3]/td[1]/复制到代码里就不行了,debug的时候显示 ...