在Android要设置UI无任务栏、无标题栏的方式有两种:
一种是,通过在Manifest中设置。
另一种在代码中设置。
具体如下:
1.Manifest设置
Manifest.xml中,直接在Application中设置整个应用的显示风格,或者找到具体的Activity设置某个页面的显示风格,通过标签“theme”进行配置,具体风格可以根据自己的需求设置。
Application的设置:
以整个应用程序为有系统任务栏,无标题栏为例说明:
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@android:style/Theme.Light.NoTitleBar">
......
</application>
Activity的设置:
以MainActivity为无系统任务栏、标题栏为例说明:
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen">
......
</activity
2.代码设置
代码设置是通过在Activity的onCreate方法中调用如下代码实现:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 去掉标题栏
requestWindowFeature(Window.FEATURE_NO_TITLE);
// 去掉任务栏
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_main);
......
}
或者将标题栏设置为自己的式样:
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
// R.layout.customtitle 是自己定义的标题文件布局
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.customtitle);
3.可能遇到的问题
通过上面的分析可以看出,去掉任务栏、标题栏的方法还是比较简单直接的,但偏偏有时候如此简单的问题,会出现莫名其妙的问题,比如打开app,或打开某个页面后,整个应用程序飞了,如果使用eclipse开发,会发现没有明显异常log,如果使用androidstudio开发环境,会幸运一下,比如会出现如下类似的提示信息:
You need to use a Theme.AppCompat theme (or descendant) with this activity.
这是因为不同的版本的Android,其Theme主题有更新,对Activity也进行了进一步的封装,比如:
在AndroidManifest.xml文件中有<application android:theme="@style/AppTheme">设置,那么其中的“@style/AppTheme”是引用自哪里呢?
是res/values/styles.xml 中的主题样式,还是 res/values-v11/styles.xml 或者 res/values-v14/styles.xml?
这是依赖于运行程序的手机系统,如果手机系统的API版本是11以上,则使用v11/styles.xml,以此类推。
而对Activity的一些封装,比如ActionBarActivity、AppCompatActivity,默认Activity必须包含标题栏,如果页面继承自这两种Activity,而在Theme又设置成无标题栏,那么就会出现程序莫名其妙飞了的问题,所以一定要注意哦~~
解决的办法有两种:
第一种,比较简单粗暴,将页面的继承类修改为Activity(如果当前代码中没有用到与AppCompatActivity有关的方法的话)
第二种:相对文雅一点,将theme修改为继承 “Theme.AppCompat.Light.NoActionBar”即可,当然此法仅限于在Manifest中进行。
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
至于ActionBarActivity、AppCompatActivity与Activity的区别,可以参考下面这篇文章:
https://blog.youkuaiyun.com/xgr1045882833/article/details/78378615
4.最后附上一些常用的Theme
android:theme="@android:style/Theme.Dialog" 将一个Activity显示为对话框模式
android:theme="@android:style/Theme.NoTitleBar" 不显示应用程序标题栏
android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 不显示应用程序标题栏,并全屏
android:theme="Theme.Light" 背景为白色
android:theme="Theme.Light.NoTitleBar" 白色背景并无标题栏
android:theme="Theme.Light.NoTitleBar.Fullscreen" 白色背景,无标题栏,全屏
android:theme="Theme.Black" 背景黑色
android:theme="Theme.Black.NoTitleBar" 黑色背景并无标题栏
android:theme="Theme.Black.NoTitleBar.Fullscreen" 黑色背景,无标题栏,全屏
android:theme="Theme.Wallpaper" 用系统桌面为应用程序背景
android:theme="Theme.Wallpaper.NoTitleBar" 用系统桌面为应用程序背景,且无标题栏
android:theme="Theme.Wallpaper.NoTitleBar.Fullscreen" 用系统桌面为应用程序背景,无标题栏,全屏
android:theme="Translucent" 透明背景
android:theme="Theme.Translucent.NoTitleBar" 透明背景并无标题
android:theme="Theme.Translucent.NoTitleBar.Fullscreen" 透明背景并无标题,全屏
android:theme="Theme.Panel" 面板风格显示
android:theme="Theme.Light.Panel" 平板风格显示
OK,就这些~