Android应用创建activity时去掉标题栏,网上有众多的解决方案,但是都停留在解决方法,但是没有解析原因。这里也只是我粗略的理解,欢迎大家的批评指正。
1:创建的activity继承Activity类时,解决方法有三种:
<1>在activity的代码中实现:只能控制当前的activity无标题栏
MainActivity.this.requestWindowFeature(Window.FEATURE_NO_TITLE);
注意:这句代码要写在setContentView()前面,否则无效。
<2>在清单文件里设置:可以使整个应用都无标题栏
<application android:icon="@drawable/icon"
android:label="@string/app_name"
android:theme="@android:style/Theme.NoTitleBar">
这是SDK自带的theme主题,但是打开查看后我们可以看到这个主题也只是设置了无标题,需要做的处理太多,页面效果非常不好, 所以这种实现方式并不建议
<style name="Theme.NoTitleBar">
<item name="windowNoTitle">true</item> </style>
<3>在styles.xml文件里定义:
<?xml version="1.0" encoding="UTF-8" ?>
<resources>
<style name="notitle" parent="Theme.APpCompat.NoActionBar">
<item name="android:windowNoTitle">true</item>
</style>
</resources>
然后在清单文件里引用就可以了:
<application android:icon="@drawable/icon"
android:label="@string/app_name"
android:theme="@style/notitle">
通过上面的实现方式我们可以看出来,@android:style引用的主题是系统SDK自带的,而@style引用的是在项目values目录下styles.xml文件里定义的主题
2:创建的activity继承自AppCompatActivity时,采用上面的第一种方法无效,第二种方法运行出错,为什么呢?
因为AppCompatActivity根本没标题栏,因为他有个ActionBar才感觉是个标题栏。那么解决办法呢?
在activity中,setContentView()方法后面,添加getSupportActionBar().hide()即可。
3:AS中我们创建activity,让他继承Activity,实际上不做任何处理,标题栏也是隐藏的,这是为什么呢?
从清单文件里的android:theme="@style/AppTheme"一级一级查下去,我们可以看到,AppTheme的最终父级 Platform.AppCompat.Light 里有这样的设定:
<item name="android:windowNoTitle">true</item> 所以会隐藏标题栏。