Android开发中,隐藏标题栏和状态栏经常用到,看似很简单的功能,但是不注意使用环境,不仅不起作用,而且还会出现错误。
在AndroidManifest.xml中使用 android:theme="@android:style/Theme.Light.NoTitleBar"
和android:theme="@android:style/Theme.Light.NoTitleBar.Fullscreen"
来隐藏标题栏和状态栏,但是运行报错:
java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
错误提示我们使用Theme.AppCompat theme
,看来Theme.Light.NoTitleBar
和Theme.Light.NoTitleBar.Fullscreen
在继承了AppCompatActivity的Activyty中会出问题。
下面我们就来详细的分析下不同情景下,隐藏标题栏和状态栏实现方法:
1. 隐藏标题栏
隐藏标题栏图① 在代码里实现
- Activity继承 Activity:
this.requestWindowFeature(Window.FEATURE_NO_TITLE);//去掉标题栏
- Activity继承 AppCompatActivity:
getSupportActionBar().hide();// 隐藏ActionBar
注意:一定要写在
setContentView()
方法之前
② 在清单文件(AndroidManifest.xml中的application
或者activity
)里面实现
- Activity继承 Activity:
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@android:style/Theme.Light.NoTitleBar">
<!--android:theme="@style/Theme.AppCompat.Light.NoActionBar"/>-->
...
</application>
<activity android:name=".MainActivity"
android:theme="@android:style/Theme.Light.NoTitleBar"/>
<!--android:theme="@style/Theme.AppCompat.Light.NoActionBar"/>-->
- Activity继承 AppCompatActivity:
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/Theme.AppCompat.Light.NoActionBar">
...
</application>
<activity android:name=".MainActivity"
android:theme="@style/Theme.AppCompat.Light.NoActionBar"/>
③ 在style.xml文件里定义,在AndroidManifest.xml中的application
或者activity
上引用
- Activity继承 Activity/AppCompatActivity:
style.xml文件:
<?xml version="1.0" encoding="UTF-8" ?>
<resources>
<style name="notitle" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowNoTitle">true</item>
</style>
</resources>
AndroidManifest.xml文件:
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/notitle">
...
</application>
<activity android:name=".MainActivity"
android:theme="@style/notitle"/>
注意:
1)android:theme="@android:style/Theme.Light.NoTitleBar"
代码如果在Application中配置的话,整个APP的Activity都只能是继承自Activity,不能是AppCompatActivity,因为AppCompatActivity下的Theme只能是ActionBar样式的;如果只在某一个Activity下配置,那么只要确保当前Activity是继承Activity,而不是继承AppCompatActivity即可;
2)android:theme="@style/Theme.AppCompat.Light.NoActionBar"
代码如果在Application中配置的话,整个APP的Activity可以继承Activity或者AppCompatActivity;如果只在某一个Activity下配置,当前Activity可以继承Activity或者AppCompatActivity。
2. 隐藏状态栏
隐藏状态栏图① 在代码里实现
- Activity继承 Activity/AppCompatActivity:
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
注意:一定要写在
setContentView()
方法之前
② 在清单文件(AndroidManifest.xml中的application
或者activity
)里面实现
- Activity继承 Activity:
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@android:style/Theme.Light.NoTitleBar.Fullscreen">
...
</application>
<activity android:name=".MainActivity"
android:theme="@android:style/Theme.Light.NoTitleBar.Fullscreen"/>
③ 在style.xml文件里定义,在AndroidManifest.xml中的application
或者activity
上引用
- Activity继承 Activity/AppCompatActivity:
style.xml文件:
<?xml version="1.0" encoding="UTF-8" ?>
<resources>
<style name="notitle" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowNoTitle">true</item>
<item name="android:windowFullscreen">true</item>
</style>
</resources>
AndroidManifest.xml文件:
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/fullscreem">
...
</application>
<activity android:name=".MainActivity"
android:theme="@style/fullscreem"/>
注意:
1)android:theme="@android:style/Theme.Light.NoTitleBar.Fullscreen"
代码如果在Application中配置的话,整个APP的Activity都只能是继承自Activity,不能是AppCompatActivity,因为AppCompatActivity下的Theme只能是ActionBar样式的;
2)代码如果只在某一个Activity下配置,那么只要确保当前Activity是继承Activity,而不是继承AppCompatActivity即可。
结语
通过上面多种方法的介绍,希望可以帮助大家更好理解和熟练地使用。
网友评论