文档章节

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

c0c0a
 c0c0a
发布于 2014/05/05 23:31
字数 561
阅读 171
收藏 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


本文转载自:【Android UI】自定义带按钮的标题栏 - 流浪的鱼 - 博客频道 - CSDN.NET http://blog.csdn.net/jia20003/article/details/129...

共有 人打赏支持
c0c0a
粉丝 0
博文 4
码字总数 210
作品 0
海淀
程序员
Android自定义View的实现(四)

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

JayPark不作死
2014/07/02
0
0
requestWindowFeature(featrueId)简述

我们在开发程序是经常会需要软件全屏显示、自定义标题(使用按钮等控件)和其他的需求,今天这一讲就是如何控制Android应用程序的窗体显示.   首先介绍一个重要方法那就是requestWindowFe...

聂磊
2013/05/26
0
0
自定义Android标题栏TitleBar布局

Layout下建立titlebar.xml: 这样虽然可以在一定程度上定制标题栏, 不过, 这里无法改变标题栏的高度和背景(背景设置之后会在两端有两个 非常难看的边框). 据说, 原因是android 固有的. 这里有...

程序袁_绪龙
2014/10/08
0
0
记录修改安卓5.0系统浏览器UI遇到的部分问题

碎碎念 今年七月份本科毕业后入职一家会议平板公司,经过一个一个多月的咸鱼培训轮岗生活,接手了几个小任务,本次记录一下其中一个任务:修改安卓5.0系统浏览器UI。刚接到任务的时候,本以为...

Newby
08/31
0
0
Android中全屏 取消标题栏,TabHost中设置NoTitleBar的三种方法

android默认标题栏比较不好控制,一般要去掉自定义 去掉标题栏的方法: 第一种:也一般入门的时候经常使用的一种方法 requestWindowFeature(Window.FEATURENOTITLE);//去掉标题栏 注意这句一...

carlos
2014/04/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Apache 流框架 Flink,Spark Streaming,Storm对比分析

1.Flink架构及特性分析 Flink是个相当早的项目,开始于2008年,但只在最近才得到注意。Flink是原生的流处理系统,提供high level的API。Flink也提供 API来像Spark一样进行批处理,但两者处理...

hblt-j
10分钟前
0
0
Dubbo/HSF在Service Mesh下的思考和方案

开头 Service Mesh这个“热”词是2016年9月被“造”出来,而今年2018年更是被称为service Mesh的关键之年,各家大公司都希望能在这个思潮下领先一步。今天我也分享阿里中间件在这方面的观点,...

Mr_zebra
11分钟前
0
0
用命令卸载Win8 IE9/IE10/IE11浏览器

首先打开,开始---运行-----框里输入cmd,进入命令提示框,将下面的命令复制粘贴到命令框里,然后按下Enter键执行。 执行完命令,必须重启电脑。 卸载IE9的命令: FORFILES /P %WINDIR%\ser...

JackFace
12分钟前
0
0
2018年产品设计协作领域最强黑马居然是它?

我发了一条朋友圈“感谢池子的秘密法宝,我今天终于吃上了女朋友做的晚饭了”并配上香香的绿豆汤,瞬间获得好几十条评论。 “同为设计师,为啥你会这么早回家?” “快扶我起来,我还能画两个...

mo311
13分钟前
0
0
linux安装jdk1.8(rpm方式)

1:下载JDK的URL地址,例如:http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpm。这个地址可以去Orcale的官网找到。通过w......

苏牧影子
18分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部