博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Android Demo】自定义Activity的标题栏(Titlebar)
阅读量:7090 次
发布时间:2019-06-28

本文共 2650 字,大约阅读时间需要 8 分钟。

缺省的情况下,通常见到Activity的标题栏(Titlebar)是这样的(红色框内):

HandleContacts是Activity的标题。

有时候,我们希望能改变一下这样单调的状况。比如,要在标题栏中增加一个用于美化界面的图标、增一个输入框或按钮之类的,怎样才能做到这一点呢?我们不妨来看一个实际的例子。
1.首先如下创建一个Android项目

 

2.将图片magnifier.png拖入该项目的res/drawable-mdpi文件夹下。magnifier.png图片的样子是这样的:

 

3.在该项目的res/layout文件夹下,创建一个布局titlebar.xml,这个布局将用于定制Activity的标题栏

编辑titlebar.xml,使其内容如下:

 

 

在上面的LinearLayout中,增加了以下控件:

一个ImageView,用于显示一个图标

一个TextView,用于显示应用的名称

一个EditText,用于接收输入

一个Button,用于测试

 

4.修改CustomizeTitlebar.java,使之如下:

 

public class CustomizeTitlebar extends Activity {
@Override public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); setContentView(R.layout.main); getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.titlebar); } }

以上加粗的两行很重要,而且必须要严格按照上面那样的顺序出现在代码中。即:

requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);必须出现在super.onCreate(savedInstanceState);之后,setContentView(R.layout.main);之前。其意思就是告诉系统,本程序要自己定义Titlebar;

getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE,R.layout.titlebar); 则必须出现在setContentView之后,其意思就是告诉系统,自定义的布局是R.layout.titlebar(即,我们前面编写的titlebar.xml)

到这里,不妨来运行一下,看看结果如何:

 

我们看到,Titlebar基本上按照我们的意思进行了改变,但也存在着一个缺陷:Titlebar太窄了,那么怎样改变Titlebar的高度呢?

 

5. 要改变Titlebar的高度,我们得先创建styles.xml:

编辑styles.xml,使其内容如下:

上面<item name="android:windowTitleSize">39dip</item>这一句,就是用来设定Titlebar的高度的。

 

6.在上面的基础上,我们需要修改AndroidManifest.xml中,相应Activity的属性。如下:

 

注意粗体字是新增上去的,其中的titlebar是在第5步中增加的。现在来看看运行结果:

可以看到结果完全符合了我们的要求。

 

7.我们还可以改变Titlebar的背景颜色。为此我们修改前面的styles.xml,使之如下:

 

注意,其中的粗体字是新增加的。

项目其他文件,均无需变动。运行结果如下:

 

8.最后,我们以OK按钮为例来测试Titlebar上的控件的事件响应。为此,修改CustomizeTitlebar.java,使之如下:

public class CustomizeTitlebar extends Activity implements OnClickListener {
private Button button; @Override public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); setContentView(R.layout.main); getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.titlebar); button = (Button)findViewById(R.id.button); button.setOnClickListener(this); } public voidonClick(View v) {
if(v.getId() == R.id.button) {
Toast.makeText(this, "OK button in Titlebar clicked...", Toast.LENGTH_LONG).show(); } } }

粗体字部分是新增加的代码。重新运行本项目,等界面出来后,点击Titlebar上的OK按钮,将出现:

 

这说明,Titlebar上自己增加上去的控件,可以很好地响应相关的事件。

本文转自叶超Luka博客园博客,原文链接:http://www.cnblogs.com/yc-755909659/archive/2012/04/04/2431962.html,如需转载请自行联系原作者
你可能感兴趣的文章
给初学者的RxJava2.0教程(三)(转)
查看>>
探究ConcurrentHashMap中键值对在Segment[]的下标如何确定
查看>>
Docker学习记录3: 搭建 Private Registry
查看>>
captive portal
查看>>
mysql基本数据类型(mysql学习笔记三)
查看>>
Laravel踩坑笔记——illuminate/html被抛弃
查看>>
飞秋命令行
查看>>
[转]python-元类
查看>>
复习日记-Listener/filter/servlet3.0/动态代理
查看>>
计算机基础——指令与程序
查看>>
Android Studio -- 关联源码
查看>>
leetcode Majority Element
查看>>
去除sql的前后半角全角空格
查看>>
关系型数据库之MySQL
查看>>
算法笔记-二叉树
查看>>
编写一个在1,2,…,9(顺序不能变)数字之间插入+或-或什么都不插入,并输出计算结果总是100的所有可能性。...
查看>>
Java异常处理课后作业
查看>>
redis 系列12 哈希对象
查看>>
企业搜索引擎开发之连接器connector(二十四)
查看>>
HDU 4902 Nice boat(线段树)
查看>>