微信公众号制作开发 微信小程序定制开发 网站建设制作 手机app软件开发

您的位置:首页 > 技术观点 > 信息详情

使用appcompat_v7,定义activity全屏或无标题栏

来源:山东鸿软信息科技有限公司  阅读量:493  时间:2016-12-06 03:36
我刚开始使用Google新推出的appcompat_v7的时候,发现当项目引用这个兼容项目并且Activity继承ActionBarActivity后,就必须使用Theme.Appcompat系列的Style才行,不然程序运行会报错的。换个主题好说,于是把程序的Style换了,程序运行就不报错了。但是问题又来了,我要Activity不显示标题栏,但是Theme.Appcompat系列的主题中就没有NoTitleBar之类的,那怎么设置主题呢?

我刚开始使用Google新推出的appcompat_v7的时候,发现当项目引用这个兼容项目并且Activity继承ActionBarActivity后,就必须使用Theme.Appcompat系列的Style才行,不然程序运行会报错的。

       换个主题好说,于是把程序的Style换了,程序运行就不报错了。但是问题又来了,我要Activity不显示标题栏,但是Theme.Appcompat系列的主题中就没有NoTitleBar之类的,那怎么设置主题呢?

       我试着自己在Styles.xml文件中自己写了一个MyAppTheme,如下:


<!--  

    Base application theme, dependent on API level. This theme is replaced  

    by AppBaseTheme from res/values-vXX/styles.xml on newer devices.  

-->  

<style name="AppBaseTheme" parent="Theme.AppCompat.Light">  

    <!--  

        Theme customizations available in newer API levels can go in  

        res/values-vXX/styles.xml, while customizations related to  

        backward-compatibility can go here.  

    -->  

</style>  

  

<!-- Application theme. -->  

<style name="AppTheme" parent="AppBaseTheme">  

    <!-- All customizations that are NOT specific to a particular API-level can go here. -->  

</style>  

  

<!-- Activity无标题栏 开始-->  

<style name="MyAppTheme" parent="AppTheme">  

    <item name="android:windowNoTitle">true</item>  

</style>  

<!-- Activity无标题栏 结束-->  


(注意AppBaseTheme我改成了Theme.AppCompat.Light,并且要把values-v11和values-v14文件夹中的styles.xml里的AppBaseTheme也一起修改掉)。

       修改后,在AndroidManifest.xml文件中,把application节点的Android:theme属性设置为“@style/MyAppTheme”。

       然后在我的手机上运行起来,OK,没有问题,确实标题栏没有了,达到了我想要的效果。

       不过还没完,我又把我的两个安卓虚拟机跑起来,系统版本分别是4.4.2和2.3.3,放到虚拟机上测试。4.4.2的虚拟机没问题,显示效果跟真机一样,但是2.3.3就没用了,还是有标题栏存在……奇怪

       后来又试了半天无果,跑到stackoverflow上面查了一下,终于有收获了。发现应该是2.x的系统下style还需要windowActionBar的属性设置为false才行,修改后的MyAppTheme如下:



<!-- Activity无标题栏 开始-->  

<style name="MyAppTheme" parent="AppTheme">  

    <item name="android:windowNoTitle">true</item>  

    <item name="windowActionBar">false</item>  

</style>  

<!-- Activity无标题栏 结束-->  

       再用2.3.3的虚拟机测试,OK,不会显示标题栏了,并且4.x的虚拟机上也没有问题。

       如果还需要全屏的效果,再给style中加上如下的两个属性就行了:

[html] view plain copy

<item name="android:windowFullscreen">true</item>  

<item name="android:windowContentOverlay">@null</item>  


       StackOverflow上关于该问题讨论的地址:Full Screen Theme for AppCompact (楼主是想同时把标题栏和顶部状态栏都隐藏了,做成全屏)


       P.s.最后顺便附上Theme.Appcompat使用Dialog类型Activity的Style:

       (如果直接使用Theme.Base.AppCompat.Light.DialogWhenLarge(或者Theme.Base.AppCompat.Dialog.Light.FixedSize),Activity虽然是Dialog类型的,但是会有标题栏存在)

[html] view plain copy

<!-- Dialog类型的Activity 开始-->  

<style name="MyDialogTheme" parent="Theme.Base.AppCompat.Light.DialogWhenLarge">  

    <item name="android:windowNoTitle">true</item>  

</style>  

<!-- Dialog类型的Activity 结束-->  


成为您更加专业的技术合伙人

网站建设 | APP开发 | 产品服务 | 技术观点 | 关于我们      客服电子邮箱:1828087588@qq.com  客服QQ:1828087588、1421667633  电话:151-6502-2080

Copyright © 2016-2024 山东鸿软信息科技有限公司 版权所有 https://www.greatsoft.cn 鲁ICP备16026454号