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

二.接下来就来介绍这两种方式:

  1. 引入布局的方式:
    第一步,新建一个Android Project,项目名取为Custom_titlebar,然后创建一个布局文件,为title.xml,这个布局即为标题栏的布局,水平依次放置了按钮,文本视图,按钮,代码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="@drawable/title_bar1"><Button android:id="@+id/back"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_margin="5dip"android:background="@drawable/back"/><TextView android:layout_width="0dp"android:layout_height="wrap_content"android:gravity="center"android:layout_weight="1"android:text="Hello World"/><Button
        android:id="@+id/ok"android:layout_width="40dp"android:layout_height="wrap_content"android:layout_margin="5dip"android:background="@drawable/ok" /></LinearLayout>

第二步,使用这个标题栏的布局,打开默认创建的activity_main.xml,代码如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent" ><include layout="@layout/title" /></LinearLayout>

第三步,修改默认的MainActivity类,因为是自定义标题栏,所以要把默认的标题栏去掉,代码如下:

package com.example.custom_titlebar;import android.app.Activity;
import android.os.Bundle;
import android.view.Window;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);//去掉标题栏setContentView(R.layout.activity_main);}}

部署此项目,就可以得到之前上面那幅图的效果了。

使用引入布局的方式,不管有多少布局需要添加标题栏,只需一行include语句就行了。

2.第二种方式,创建自定义控件的方式:
引入布局的方式解决了重复编写布局代码的问题,但是如果布局中有一些控件要求能够响应事件,我们还是需要在每个Activity中为这些控件单独编写一次事件注册的代码。比如,每个标题栏上有个返回按钮,在每一个Activity里的功能都是一样的,如果使用引入布局的方式,将会增加很多代码,所以,自定义控件可以解决这样的问题。

第一步,新建一个title.xml布局文件,代码同第一种方式的title.xml文件一样。

第二步,新建一个TitleLayout类,继承于LinearLayout类,让此类成为我们的自定义标题栏控件,代码如下:

package com.example.custom;import com.example.custom_titlebar1.R;import android.app.Activity;
import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.Toast;public class TitleLayout extends LinearLayout{/*** 构造方法* @param context 上下文对象* @param attrs*/public TitleLayout(Context context, AttributeSet attrs) {super(context, attrs);LayoutInflater.from(context).inflate(R.layout.title, this);//加载title.xml的布局文件Button back=(Button)findViewById(R.id.back);//获取title.xml布局文件中的返回按钮Button ok=(Button)findViewById(R.id.ok);//获取title.xml布局文件中的确认按钮/*** 添加各自的事件监听器*/back.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stub((Activity) getContext()).finish();//返回上一个界面}});ok.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubToast.makeText(getContext(), "OK", Toast.LENGTH_SHORT).show();//显示OK的消息提示框}});}}

第三步,在默认的activity_main.xml布局文件中添加此自定义标题栏控件,代码如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent" ><com.example.custom.TitleLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"/>
</LinearLayout>

其中添加自定义控件要指明控件的完整类名,包名是不能省略的。

第四步,修改MainActivity类,代码同第一种方式的MainActivity类一样。

部署此项目,就可以得到之前上面那幅图的效果了,此时我们点击左边的按钮,可返回上一级界面,点击右边的按钮,将会弹出消息提示框OK。

三.我是从书上学来的,因此写篇文章积累一下,如有雷同,很正常,以上内容仅供大家学习参考,谢谢!

Android学习之自定义标题栏相关推荐

  1. 安卓学习随笔 -- 自定义标题栏

    在安卓中不喜欢系统默认的标题栏,那么如何让自定义一个自己的标题栏呢. 自定义后的标题栏如下: 首先这里需要定义一个自定义的标题栏布局 title.xml文件 (里边需要两个图片这个很简单) <R ...

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

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

  3. Android学习:自定义ViewGroup方法总结

    毕设应用中需要添加一个滑动按钮,在网上看了几个Demo之后决定自定义ViewGroup来实现. 这里是对实现过程中自定义ViewGroup的方法总结. 关于ViewGroup,文档给出的描述是: A ...

  4. 【Android学习】自定义Android样式checkbox

    下面简单介绍下在Androdi中如何更改Checkbox的背景图片,可以自定义样式 1.首先res/drawable中定义编写如下样式的XML,命名为:checkbox_style: 1 <?x ...

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

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

  6. Android 学习之自定义动画运用贝赛尔曲线

    ** 1:贝赛尔曲线简介 ** 贝塞尔曲线(Bézier curve),又称贝兹曲线或贝济埃曲线,是应用于二维图形应用程序的数学曲线 . 贝塞尔曲线的有趣之处更在于它的"皮筋效应" ...

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

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

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

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

  9. android 刷新标题栏,Android 自定义标题栏的实例详解

    Android 自定义标题栏的实例详解 开发 Android APP 经常会用到自定义标题栏,而有多级页面的情况下还需要给自定义标题栏传递数据. 本文要点: 自定义标题填充不完整 自定义标题栏返回按钮 ...

最新文章

  1. 本地共享映射文件夹进行删除操作_从集群建立到航测建模CC(Smart3D)实用操作教程...
  2. Python实现kNN算法
  3. php多图片上传并压缩,PHP 上传图片并压缩方法详解
  4. ASP.NET之JSONHelper操作
  5. 计算机基础win7桌面操作,windows7基本操作方法(零基础的人教学)-win7教程
  6. java中的函数指的是,函数式接口在Java中是指有且仅有一个抽象方法的接口。( )...
  7. IEC61850的Read请求报文件MMS PDU解码
  8. 部署Screego浏览器实现多人共享屏幕
  9. 谷歌Google搜索及谷歌Google学术搜索镜像网站汇总
  10. NetFlow Analyzer无线网络管理
  11. 阴阳师服务器维护3月25日,阴阳师3月25日更新内容-阴阳师3月25日更新内容介绍_牛游戏网...
  12. 实现虚拟机与板卡/树莓派网络互联,并通过笔记本wifi共享上网
  13. 用Notepad++实现文本比较
  14. 拼多多直通车推广做好关键性的一步:商品标题如何引流?
  15. 手机怎么使用涂鸦?分享几个手机视频怎么添加涂鸦的妙招
  16. 高级计算机维修员+职业资格证书查询,国家职业资格证书查询(全国联网)
  17. 贪吃的大嘴java_[蓝桥杯][算法提高VIP]贪吃的大嘴-题解(Java代码)
  18. 收支科目不为零_期间损益结转余额为零能结账吗
  19. FS2711单片机可替换松翰SN8P2711
  20. 三层网络防护的域渗透

热门文章

  1. MySQL_(Java)分页查询MySQL中的数据
  2. Amazon SQS 消息队列服务
  3. netty9---使用编码解码器
  4. Linux 设置环境变量导致bash:command not found
  5. Hibernate学习之一级缓存
  6. RHEL7 本地yum源配置
  7. PyTorch入门(三)--实现简单图像分类器
  8. c语言让系统蓝屏,0x000000116,教您解决电脑蓝屏代码0x000000116
  9. 7-9 根据后序和中序遍历输出先序遍历 (10 分)
  10. 无法获得 VMCI 驱动程序的版本: 句柄无效。 驱动程序“vmci.sys”的版本不正确。请尝试重新安装 VMware Workstation。 开启模块 DevicePowerOn 的操作失败