通过theme来自定义标题栏

本文介绍如何通过修改Android项目的theme来实现自定义标题栏样式,包括设置标题栏颜色、高度及标题文字居中等。

安卓默认的标题栏黑乎乎非常难看。不过可以通过theme来自定义标题栏样式。

在一次项目中需要把颜色修改为蓝色,高度40dp,标题文字居中的效果,不过网上没有搜到好的解决方法,又不想用自定义标题栏。所以把自己想出来的方法记下来。

步骤如下:

1.首先在values文件夹下创建colors.xml文件,内容如下:

[html]  view plain copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <resources xmlns:android="http://schemas.android.com/apk/res/android" >  
  3. <color name="blue">#ff004B97</color>  
  4. </resources>  

2.在styles.xml文件中添加以下代码:

[html]  view plain copy
  1. <style name="CustomTextApperance" >  
  2.     <item name="android:textColor">#fff</item>  
  3.     <item name="android:textSize">18sp</item>  
  4.     <item name="android:textStyle">bold</item>  
  5. </style>  
  6.   
  7. <style name="CustomWindowTitle" parent="*android:WindowTitle">  
  8.     <item name="android:textAppearance">@style/CustomTextApperance</item>  
  9. </style>  
  10.   
  11. <style name="CustomTitleBackground" parent="*android:WindowTitleBackground">  
  12.     <item name="android:background">@color/blue</item>  
  13. </style>  
  14.   
  15. <!-- Application theme. -->  
  16. <style name="CustomAppTheme" parent="android:Theme.Light">  
  17.     <item name="android:windowTitleStyle">@style/CustomWindowTitle</item>  
  18.     <item name="android:windowTitleBackgroundStyle">@style/CustomTitleBackground</item>  
  19.     <item name="android:windowTitleSize">40dp</item>  
  20. </style>  

其中和title相关的属性有

android:windowTitleStyle:设置标题样式,这个主要是设置显示标题文字的Textview的各项样式。

windowTitleBackgroundStyle:设置标题栏背景色。通过属性android:background设置,注意此属性需要为drowable资源,直接写类似#ff234562的颜色值将无效,所以需要将颜色值先定义到colors.xml文件中。

android:windowTitleSize:设置标题高度。


然后在AndroidManifest.xml中设置application的theme为android:theme="@style/CustomAppTheme" 


经过上面的设置可以实现蓝色背景,高度40dp的标题栏,但是此时标题还没有居中。我曾经尝试在style中通过设置android:gravity=center等方式,但都没有成功。

后来在activity的代码中添加以下代码才实现了居中效果:

[java]  view plain copy
  1. @Override  
  2. protected void onCreate(Bundle savedInstanceState) {  
  3.     super.onCreate(savedInstanceState);  
TextView view = (TextView) findViewById(android.R.id.title);view.setGravity(Gravity.CENTER);
[java]  view plain copy
  1.         setContentView(R.layout.activity_main);  
  2. ...  
  3. }  

其中颜色代码为添加的代码。优快云代码没法上色。。。。。。


最终效果图:



效果实现了,但是在实际使用中却发现,每次打开界面的时候,标题文字仍然会靠左一段时间,然后才变为居中。这是因为标题栏在执行activity的onCreate方法前就显示出来了,而我们是在onCreate方法中设置的标题栏文字居中。最后无奈的解决方法是将标题栏的文字颜色修改为和标题栏背景色一样。然后再在onCreate方法中同时设置居中和标题颜色为白色。这样的效果为启动界面的前一小会看不到标题,然后出现居中的标题。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值