Android 4.0中去掉标题栏和状态栏的方法

时间:2022-05-21 19:27:30

Android 4.0中去掉标题栏和状态栏的方法

在Android中如何去除状态栏和标题栏这个问题,视乎并不复杂,但随着Android快速发展,不同的版本还是有一些差异,在项目中还是要稍加注意,否则会出现不少问题和反复。最近项目中就曾出现过这样的问题。有点扯远了,言归正传。在之前的 Android去掉标题栏和状态栏的方法 文中介绍的方法,完全适用于Android2.3版本,但是Android4.0版本中却并不能完全实现目的。

首先说Android4.0中去除标题栏和状态栏的方法,

一、在代码中使用方法如下:

protected void onCreate(Bundle savedInstanceState) {  

    super.onCreate(savedInstanceState);  

    getWindow().getDecorView().setSystemUiVisibility(View.GONE);//隐藏状态栏

    setContentView(R.layout.activity_main);  

}  

 

此方法可使在Android4.0以上版本实现状态栏的隐藏,再加上我们在Android2.3中常用的去除标题栏的方法就可以成功的在Android4.0以上版本中实现全屏了!

注意:在该语句中的setSystemUiVisibility()方法需要API level 11 ,如果使用的SDK版本太低也是不能实现全屏的。所以一定要在AndroidManifest.xml文件中配置sdk的targetSdkVersion大于或等于11;

<uses-sdk  

       android:minSdkVersion="8"  

       android:targetSdkVersion="16" />      <!--sdk目标版本大于11-->  

二、在配置文件文件AndroidManifest.xml中方法:

android:theme="@android:style/Theme.NoTitleBar.Fullscreen"  

这段代码在Android4.0中是可以使用的,隐藏掉的是TitleBar,也可以实现"全屏"但是这里的全屏并不是真正意义上的全屏,在屏幕的最下方会有3个虚拟键(back,home,recentApp)

4.0之前的机器,一般都是3个物理按键,所以实现全屏没有什么问题,但是4.0以后物理按键变成了虚拟按键,如果去掉状态栏你会发现没有返回键、主菜单键,所以现在用该代码来实现的全屏,始终最底下会有3个虚拟键.

当然对于Android系统自带的Theme.Style不满意,可以自己定义新的Theme.Style.

三、一些语句分析

getWindow().getDecorView().setSystemUiVisibility(View.GONE);  

getWindow(): 获取本activity的窗口实例;

getDecorView(): 获取DecorView;

setSystemUiVisibility(View.GONE):该方法类似我们的应用代码中经常使用某个view的setVisibility()方法来隐藏、显示和去掉这个view;只不过这里是来去除系统UI的view;实质也是找到状态栏的View然后调用系统api把它去除掉!

四、对于自定义Theme.style的说明

在Android4.0源代码中添加系统的自定义Theme.style,需要修改以下两个文件:Framework/base/core/res/values/目录下的public.xml,Themes.xml。在public.xml中定义新style的name和id,在style.xml中定义具体style.实例如下:

在public.xml中

  <!--my Custom Theme Begin-->

 <public type="style" name="Theme.Holo.NoTitleBar"id="0x010301f0" /> 

 <public type="style"name="Theme.Holo.NoTitleBar.Fullscreen" id="0x010301f1"/> 

 <!--my Custom Theme  End-->


在Themes.xml中

    <style name="Theme.Holo.NoTitleBar">

        <itemname="android:windowFullscreen">false</item>

          <itemname="android:windowActionBar">true</item>

        <itemname="android:windowNoTitle">true</item>

   </style>

   

   <style name="Theme.Holo.NoTitleBar.Fullscreen">

        <itemname="android:windowFullscreen">true</item>

          <itemname="android:windowActionBar">true</item>

        <itemname="android:windowNoTitle">true</item>

   </style>


注意:1. public.xml中style的id是唯一的,不能和其他Id重复。name也要注意,例如:要定义Theme.holo.NoTitleBar.FullScreen这个style,要先定义Theme.holo.NoTitleBar,否则系统也会报错:找不到Theme.holo.NoTitleBar。

2. 在源码中添加系统的自定义Theme.style 之后,要make update-api,否则编译将出错。

3. 自定义Theme.style如要在应用的<application>字段使用,要注意不要和其包含的<activity>字段中定义的Theme.style冲突,否则进入该Activity时会出错。


在应用中可直接在应用的res/values/style.xml中按规则添加新的style,之后在该应用中使用。