Android 自定义标题栏的实例详解
作者:他叫自己MR张 发布时间:2021-11-06 00:53:04
Android 自定义标题栏的实例详解
开发 Android APP 经常会用到自定义标题栏,而有多级页面的情况下还需要给自定义标题栏传递数据。
本文要点:
自定义标题填充不完整
自定义标题栏返回按钮的点击事件
一、代码
这里先介绍一下流程:
1. 创建一个标题栏布局文件 mytitlebar.xml
2. 在style.xml中创建 mytitlestyle 主题
3. 创建类 CustomTitleBar
4. 在需要自定义标题栏的Activity的OnCreate方法中实例化 CustomTitleBar
5. 在 AndroidManifest.xml 对使用了自定义标题栏的Activity定义主题
1.定义一个自定义的标题栏布局 mytitlebar.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
android:id="@+id/re_title" xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="50dp" //定义自定义标题栏的高度
android:background="@color/start_background"
android:orientation="horizontal">
<ImageButton
android:scaleType="fitXY"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:layout_marginLeft="10dp"
android:id="@+id/bt_back"
android:layout_width="25dp"
android:layout_height="25dp"
android:src="@drawable/left_back"
android:background="@color/touming"/>
<TextView
android:id="@+id/mytitle"
android:layout_centerInParent="true"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center"//使文字在整个标题栏的中间
android:textColor="#fff"
android:textSize="20dp" />
</RelativeLayout >
2.在 style.xml 中创建 mytitlestyle 主题
<resources>
<!-- 自定义标题栏 parent="android:Theme" 这个属性必须写 -->
<style name="mytitlestyle" parent="android:Theme">
<!-- 设置高度,和 mytitlebar.xml中保持一致 -->
<item name="android:windowTitleSize">50dp</item>
<!-- 设置内填充为0 使自定义标题填充整个标题栏,否则左右两边有空隙 -->
<item name="android:padding">0dp</item>
</style>
</resources>
3.创建类 CustomTitleBar
public class CustomTitleBar {
private Activity mActivity;
//不要使用 static 因为有 * 页面返回时会报错
/**
* @param activity
* @param title
* @see [自定义标题栏]
*/
public void getTitleBar(Activity activity, String title) {
mActivity = activity;
activity.requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
//指定自定义标题栏的布局文件
activity.setContentView(R.layout.mytitlebar);
activity.getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE,
R.layout.mytitlebar);
//获取自定义标题栏的TextView控件并设置内容为传递过来的字符串
TextView textView = (TextView) activity.findViewById(R.id.mytitle);
textView.setText(title);
//设置返回按钮的点击事件
ImageButton titleBackBtn = (ImageButton) activity.findViewById(R.id.bt_back);
titleBackBtn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
//调用系统的返回按键的点击事件
mActivity.onBackPressed();
}
});
}
}
4.在需要自定义标题栏的Activity的OnCreate方法中实例化 CustomTitleBar,这里是food页面
public class food extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//实例化CustomTitleBar 传递相应的参数
CustomTitleBar ct = new CustomTitleBar();
ct.getTitleBar(this, "美食");
setContentView(R.layout.page_food);
}
}
5.在 AndroidManifest.xml 对使用了自定义标题栏的Activity定义主题
//省略了其余部分,android:theme="@style/mytitlestyle"这句必需写
<activity
android:name=".food"
android:label="@string/activity_food"
android:theme="@style/mytitlestyle" />
二、总结
使用自定义标题栏的时候,很多人会遇到填充不满,左右两边有空隙以及返回按钮点击事件不响应的问题,这里测试和总结了最为合适的方式解决。
自定义标题栏填充不满,网上有不少解决方案,有的还比较复杂,我这里直接在定义Theme时一个属性就解决了,还比较容易理解。
自定义标题栏返回按钮点击事件不响应或出错的问题,也是测试了网上的很多代码,用onBackPressed()最为方便,也有人使用finish(),其余的OnKeyDown之类的测试未通过。
如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
来源:http://blog.csdn.net/ys743276112/article/details/44204323


猜你喜欢
- 有时候数据库文档需要整理,可是只能手动的复制粘贴,心中一万只草泥马奔腾而过。。。screw简洁好用的数据库表结构文档生成工具。1. 创建项目
- 1.客户端代码public class UploadPicClient { public static void main(String[]
- 最近几天一直在看Hadoop相关的书籍,目前稍微有点感觉,自己就仿照着WordCount程序自己编写了一个统计关联商品。需求描述:根据超市的
- java Hibernate多对多映射前言:一、单向多对多 单向多对多的例子用人和职位来举例,一个人可以有多个职位
- 手动编写 SQL 语句和映射实体类的过程常常是繁琐且易出错的。这时,我们就可以借助 MyBatis Generator (MBG) 这个强大
- C# double.ToString()的用法C# 中 double 类型的数据,有时需要格式化显示为字符串(保留N位有效数字或者是保留N位
- 本文实例为大家分享了C#线程倒计时器源码,供大家参考,具体内容如下using System;using System.Collections
- 本文介绍了Android中js和原生交互的示例代码,分享给大家,具体如下:加载webview的类public class MainActiv
- 这个CardStackViewpager的灵感来自Github上面的 FlippableStackView开源项目,而我想实现的效果方向上恰
- 前言在做JAVA EE开发的过程中,更多的是使用框架来提高开发效率.越来越发现,之前很基础的一些东西,都忘记的差不多了.从今天开始慢慢的复习
- 目录前言Lottie案例尝试1. 集成依赖2. 添加 LottieAnimationView 加载网络资源3. 加载本地资源4. 循环播放
- 本Demo为练手小项目,主要是熟悉目前主流APP的架构模式.此项目中采用MVC设计模式,纯代码和少许XIB方式实现.主要实现了朋友圈功能和摇
- 前言WorkManager 是 Android Jetpack 中的新组件,用于负责管理后台任务。关于这个组件的介绍就不多说了,网上到处都是
- Task的应用Task的MSDN的描述如下:【Task类的表示单个操作不会返回一个值,通常以异步方式执行。Task对象是一种的中心思想基于任
- 最近在研究断点下载(下载续传)的功能,此功能需要服务端和客户端进行对接编写,本篇也是记录一下关于贴上关于实现服务端(Spring Boot)
- Android 捕获运行时异常详解Android 异常分为两类:CheckedException 和 UnCheckedExceptionC
- 本文主要介绍了关于c#和java base64不一致的解决方法,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧不一致的问题不
- 前言上篇Java Mybatis数据源之工厂模式文章中我们介绍了Mybatis的数据源模块的DataSource接口和它对应的实现
- Compose中我们应该怎么使用地图呢?像之前我们在xml里面创建MapView,都是在Activity里面,管理MapView生命周期,和
- scheduleAtFixedRate(task,time,period)task-所要安排的任务 time-首次执行任务的时间 perio