文档章节

【Android UI】自定义带按钮的标题栏

c0c0a
 c0c0a
发布于 2014/05/05 23:31
字数 561
阅读 169
收藏 0
点赞 0
评论 0

自定义标题栏在很多的android app中很常见,可以说是一种很有用的UI设计方法。自

己也本着学习的态度,经过一番各种坑,终于实现了,现总结如下:

一:大致流程

1.      对指定的android activity设置自定义主题风格,其中自定义主题风格是关键

在android 4.0以上版本中如果使用Theme.Holo或者Theme.Light等,程序会

一直报错误-you cannot combine custom title with other feature titles

2.      在对应的Activity中加入代码

[java] view plaincopy

  1. super.onCreate(savedInstanceState);  

  2. requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);  

  3. setContentView(R.layout.main);  

  4. getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE,R.layout.mycustomtitle);  

3.      在styles.xml使用如下的自定义主题,发现只有使用这个默认主题才不出第一步的

错误,真是各种坑啊!

[html] view plaincopy

  1. <resources>  

  2.   

  3.     <style name="WindowTitleBackground" >     

  4.         <item name="android:background">@color/blue</item>         

  5.     </style>  

  6.     <style name="MyTheme" parent="android:Theme">  

  7.         <item name="android:windowTitleSize">60dp</item>  

  8.         <item name="android:windowTitleBackgroundStyle">@style/WindowTitleBackground</item>                  

  9.     </style>  

  10.   

  11. </resources>  

4.      关键技巧,使用RelativeLayout来对齐自定义Title的组件

二:测试MainActivity源代码

[java] view plaincopy

  1. package com.gloomyfish.titledemo;  

  2.   

  3. import android.app.Activity;  

  4. import android.os.Bundle;  

  5. import android.view.Window;  

  6.   

  7. public class MainActivity extends Activity {  

  8.   

  9.     @Override  

  10.     protected void onCreate(Bundle savedInstanceState) {  

  11.         super.onCreate(savedInstanceState);  

  12.         requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);  

  13.         setContentView(R.layout.main);  

  14.         getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE,R.layout.mycustomtitle);  

  15.     }  

  16.       

  17. }  

三:XML资源文件

mycustomtitle.xml的内容

[java] view plaincopy

  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  

  2.     android:layout_width="fill_parent"  

  3.     android:layout_gravity="fill_horizontal"  

  4.     android:orientation="horizontal"  

  5.     android:layout_height="fill_parent" >  

  6.     <Button  android:id="@+id/header_left_btn"  

  7.         android:layout_width="wrap_content"  

  8.         android:layout_height="wrap_content"  

  9.         android:layout_alignParentLeft="true"  

  10.         android:layout_marginLeft="5dp"  

  11.         android:layout_centerVertical="true"  

  12.         android:text="返回"  

  13.         android:textColor="#000000"/>  

  14.       

  15.         <TextView android:id="@+id/header_text"  

  16.             android:layout_width="fill_parent"  

  17.             android:layout_height="fill_parent"  

  18.             android:layout_toRightOf="@+id/header_left_btn"  

  19.             android:layout_toLeftOf="@+id/header_right_btn"  

  20.             android:text="My Title Bar"  

  21.             android:textSize="20sp"  

  22.             android:textStyle="bold"  

  23.             android:textColor="#FFFFFF"  

  24.             android:gravity="center"  

  25.             android:layout_centerHorizontal="true"  

  26.             android:layout_centerVertical="true"  

  27.             android:singleLine="true" />  

  28.              

  29.         <Button  android:id="@+id/header_right_btn"  

  30.             android:layout_width="wrap_content"  

  31.              android:layout_height="wrap_content"  

  32.             android:layout_alignParentRight="true"  

  33.             android:layout_marginRight="5dp"  

  34.              android:layout_centerVertical="true"  

  35.              android:text="图片"    

  36.              android:textColor="#000000"/>  

  37.   

  38. </RelativeLayout>  

最后别忘记在androi的manifest配置文件中加上自定义的主题

[html] view plaincopy

  1. android:theme="@style/MyTheme"   

同时还要删除IDE默认生成的那些appTheme,不然也会一直报错!

最终效果如下:


实现这个自定义标题栏的时候,看到stackoverflow上面说

如果使用Theme.Holo一定要换成Theme.Holo.NoActionBar主题

可以我换了以后发现,还是各种坑,一直不出效果。

所以我推荐一定要使用android:theme


© 著作权归作者所有

共有 人打赏支持
c0c0a
粉丝 0
博文 2
码字总数 210
作品 0
海淀
程序员
安卓自定义View进阶-事件分发机制原理

安卓自定义View进阶-事件分发机制原理 之前讲解了很多与View绘图相关的知识,你可以在 安卓自定义View教程目录 中查看到这些文章,如果你理解了这些文章,那么至少2D绘图部分不是难题了,大部...

猴亮屏 ⋅ 05/22 ⋅ 0

Android自定义View的实现(四)

如果说要按类型来划分的话,自定义View的实现方式大概可以分为三种,自绘控件、组合控件、以及继承控件。那么下面我们就来依次学习一下,每种方式分别是如何自定义View的。 一、自绘控件 自绘...

JayPark不作死 ⋅ 2014/07/02 ⋅ 0

Android开发权威指南(第2版)新书发布

《Android开发权威指南(第二版)》是畅销书《Android开发权威指南》的升级版,内容更新超过80%,是一本全面介绍Android应用开发的专著,拥有45章精彩内容供读者学习。  《Android开发权威指...

androidguy ⋅ 2013/09/05 ⋅ 0

彻底理解 Android 中的阴影

如果我们想创造更好的 Android App,我相信我们需要遵循 Material Design 的设计规范。一般而言,Material Design 是一个包含光线,材质和投影的三维环境。如果我们想要在 App 的开发过程中,...

丁佳辉 ⋅ 04/18 ⋅ 0

android仿摩拜单车APP、炫酷RecyclerView、卡片滑动、仿饿了么点餐、自定义索引等源码

Android精选源码 Android自定义索引源码(http://www.apkbus.com/thread-599163-1-1.html) LayoutManager实现的卡片滑动(http://www.apkbus.com/thread-599396-1-1.html) android仿摩拜单车A......

逆鳞龙 ⋅ 05/22 ⋅ 0

笔记47 | Android性能优化之使用include标签重用layouts(二)

地址 笔记47 | Android性能优化之使用include标签重用layouts(二) 目录 前言 创建可重用 Layout 使用标签 使用标签 前言 虽然 Android 提供很多小的可重用的交互组件,你仍然可能需要重用复...

项勇 ⋅ 2017/12/06 ⋅ 0

仿微博App 才搭了个架子 仅做个人记录

才做了一点点。。。之所以写本文,是因为,架构搭的还算可以,个人记录下,哈哈 lib是我的代码库,micro blog是这个项目的东西 lib没有直接从我的Lib项目拷过来 原因:1.还用不上那么多 2.养成...

qq_36523667 ⋅ 04/18 ⋅ 0

Android Toolbar Example 示例

每个活动最顶部的那个标题栏就是 ActionBar,不过 ActionBar 由于其设计的原因,被限定只能位于活动的顶部,从而不能实现一些 Material Design 的效果,因此官方现在已经不再建议使用 Action...

xandeer ⋅ 2017/10/11 ⋅ 0

Android多人视频聊天应用的开发(三)多人聊天

在上一篇《Android多人视频聊天应用的开发(二)一对一聊天》中我们学习了如何使用声网Agora SDK进行一对一的聊天,本篇主要讨论如何使用Agora SDK进行多人聊天。主要需要实现以下功能: 1、...

东风玖哥 ⋅ 04/17 ⋅ 0

android高仿抖音、点餐界面、天气项目、自定义view指示、爬取美女图片等源码

Android精选源码 一个爬取美女图片的app(http://www.apkbus.com/thread-600077-1-1.html) Android高仿抖音(http://www.apkbus.com/thread-600081-1-1.html) android一个可以上拉下滑的Ui效果......

逆鳞龙 ⋅ 06/12 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

聊聊spring cloud的RequestRateLimiterGatewayFilter

序 本文主要研究一下spring cloud的RequestRateLimiterGatewayFilter GatewayAutoConfiguration @Configuration@ConditionalOnProperty(name = "spring.cloud.gateway.enabled", matchIfMi......

go4it ⋅ 43分钟前 ⋅ 0

Spring JavaConfig 注解

JavaConfig注解允许开发者将Bean的定义和配置放在Java类中。它是除使用XML文件定义和配置Bean外的另一种方案。 配置: 如一个Bean如果在XML文件可以这样配置: <bean id="helloBean" class="...

霍淇滨 ⋅ 50分钟前 ⋅ 0

Spring clound 组件

Spring Cloud技术应用从场景上可以分为两大类:润物无声类和独挑大梁类。 润物无声,融合在每个微服务中、依赖其它组件并为其提供服务。 Ribbon,客户端负载均衡,特性有区域亲和、重试机制。...

英雄有梦没死就别停 ⋅ 52分钟前 ⋅ 0

Confluence 6 重新获得站点备份文件

Confluence 将会创建备份,同时压缩 XML 文件后存储熬你的 <home-directory>/backups> 目录中。你需要自己访问你安装的 Confluence 服务器,并且从服务器上获得这个文件。 运行从 Confluence...

honeymose ⋅ 56分钟前 ⋅ 0

informix的常用SQL语句

1、创建数据库 eg1. 创建不记录日志的库testdb,参考语句如下: CREATE DATABASE testdb; eg2. 创建带缓冲式的记录日志的数据库testdb(SQL语句不一定在事务之中,拥有者名字不被用于对象的解...

wangxuwei ⋅ 今天 ⋅ 0

matplotlib画图

最简单的入门是从类 MATLAB API 开始,它被设计成兼容 MATLAB 绘图函数。 from pylab import *from numpy import *x = linspace(0, 5, 10)y = x ** 2figure()plot(x, y, 'r')...

Dr_hu ⋅ 今天 ⋅ 0

RabbitMQ学习以及与Spring的集成(三)

本文介绍RabbitMQ与Spring的简单集成以及消息的发送和接收。 在RabbitMQ的Spring配置文件中,首先需要增加命名空间。 xmlns:rabbit="http://www.springframework.org/schema/rabbit" 其次是模...

onedotdot ⋅ 今天 ⋅ 0

JAVA实现仿微信红包分配规则

最近过年发红包拜年成为一种新的潮流,作为程序猿对算法的好奇远远要大于对红包的好奇,这里介绍一种自己想到的一种随机红包分配策略,还请大家多多指教。 算法介绍 一、红包金额限制 对于微...

小致dad ⋅ 今天 ⋅ 0

Python 数电表格格式化 xlutils xlwt xlrd的使用

需要安装 xlutils xlwt xlrd 格式化前 格式化后 代码 先copy读取的表格,然后按照一定的规则修改,将昵称中的学号提取出来替换昵称即可 from xlrd import open_workbookfrom xlutils.copy ...

阿豪boy ⋅ 今天 ⋅ 0

面试题:使用rand5()生成rand7()

前言 读研究生这3 年,思维与本科相比变化挺大的,这几年除了看论文、设计方案,更重要的是学会注重先思考、再实现,感觉更加成熟吧,不再像个小P孩,人年轻时总会心高气傲。有1 道面试题:给...

初雪之音 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部