Android实现无任务栏,无标题栏的方法以及可能出现报错的原因

在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.csdn.net/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,就这些~

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值