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

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

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

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

protectedvoidonCreate(BundlesavedInstanceState){

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 ThemeBegin-->

<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,之后在该应用中使用。



更多相关文章

  1. cocos2dx 2.0版本在android下的安装配置问题
  2. 从源码中浅析Android中如何利用attrs和styles定义控件
  3. Android专题之AsyncTask(三)异步方法操作之进度条
  4. android如何统一aar/jar/moudle中引用依赖库版本不一致的问题
  5. Android Crash异常处理方法
  6. android 自定义View类的简单使用 示例

随机推荐

  1. android studio使用jni调用opencv库实现
  2. Android运行时权限一览表
  3. [Android|深度学习移植]--基于ncnn的RK33
  4. android RadioGroup实现单选以及默认选中
  5. Android框架布局管理器FrameLayout
  6. android红米等关于读取本地文件夹图片获
  7. Android系统架构详解
  8. 转自应用程序获得系统权限
  9. com.android.internal.R,android.R,Framewo
  10. Android(安卓)中文API (70) —— Bluetooth