如何阻止app_name在标题栏中闪现

本文介绍如何在Android应用中自定义Activity的TitleBar,并去除应用启动时默认显示的应用名称,确保应用启动时直接展示自定义的TitleBar。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自:

http://zcbbupt.iteye.com/blog/1029947


常见自定义titlebar的方法是在values文件夹中新建一个我们自己的titlebar主题,例如: 
values/custom_styles.xml: 

Xml代码  收藏代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <resources>  
  3.     <style name="TitlebarBackgroundStyle">  
  4.         <item name="android:background">@drawable/titlebar</item>  
  5.     </style>  
  6.     <style name="Theme.MyCustomTheme" parent="android:Theme">   
  7.         <item name="android:windowTitleBackgroundStyle">@style/TitlebarBackgroundStyle</item>  
  8.         <item name="android:windowTitleSize">45dp</item>  
  9.     </style>  
  10. </resources>  


然后在manifest文件中为activity添加自定义主题,   
Xml代码  收藏代码
  1. <activity android:name=".MyTitleBar"  
  2.                 android:label="@string/app_name"  
  3.                 android:theme="@style/Theme.MyCustomTheme" //注意添加与此  

这样就基本上完成了自定义titlebar。 
声明无标题栏的方法更简单就是直接在activity中添加语句 
Java代码  收藏代码
  1. requestWindowFeature(Window.FEATURE_NO_TITLE);  


但是无论是通过上面代码定义无标题栏的activity,还是通过自定义主题重写titlebar,app首次载入时,系统总是会闪现一下app_name,然后才会运行我们定义的titlebar行为。这是一个令人诡异的行为。那么怎么去除app_name呢? 

首先我们来看一下android运行app的基本原理:在系统运行一个application时,为了尽快响应用户,android首先会给用户呈现一个app的“preview”窗口,这个界面甚至早于应用的实际进程。这个预览“preview”窗口中的信息就是从app的manifest文件中获得的,所以一般app运行时总会显示一个具有app_name的titlebar,而不论我们在程序中如何定义我们的titlebar。所以解决的办法来了。 

首先我们可以在app的manifest文件中,给我们的main activity添加无标题栏的主题
Android代码  收藏代码
  1. android:theme="@android:style/Theme.NoTitleBar"  

声明我们的app根本不需要titlebar,这样app首次载入便不会闪现一下带有app_name的titlebar了。这比
Java代码  收藏代码
  1. requestWindowFeature(Window.FEATURE_NO_TITLE);  
好使得多。但是问题来了,如果我还想要app呈现我自定义的标题栏怎么办呢? 

解决的办法是在需要自定义titlebar的activity中通过 
Java代码  收藏代码
  1. setTheme(android.R.style.Theme);  

声明回标题栏。 
需要注意的是setTheme(android.R.style.Theme);语句需要放在oncreat()语句的最前面否则会报错的。例如:
Java代码  收藏代码
  1. protected void onCreate(Bundle savedInstanceState) {  
  2.         // TODO Auto-generated method stub  
  3.         setTheme(R.style.MyCustomTheme);//注意这一句的位置  
  4.         super.onCreate(savedInstanceState);  
  5.         requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);        
  6.         setContentView(R.layout.progressbar_test);  
  7.         getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE,      // 注意顺序  
  8.                 R.layout.title);  

这样运行期间系统就会直接运行我们定义的标题栏,而不是先短暂的呈现app_name,再呈现我们的标题栏特征。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值