自定义Theme踩的坑

今天新写了一个activity,想把它设置为全屏的,于是乎在AndroidManifest文件中找到了这个activity,给它设置一个theme。

android:theme=”@android:style/Theme.NoTitleBar.Fullscreen”

运行项目,居然报错了,查看日志发现该activity继承了AppCompatActivity,需要用AppCompat主题。那就自定义一个好了。找到系统Fullscreen主题,复制出来,给他个parent。

    <style name="Fullscreen" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="windowFullscreen">true</item>
        <item name="windowContentOverlay">@null</item>
    </style>

再次运行,构建失败!查看日志发现:

AAPT2 error: check logs for details

看到这个似曾相识的log(之前Android升级3.0的时候也出现过aapt2的错误),于是按照之前的方法一顿骚操作,结果发现还是不行。接着突发奇想的删除了当前用户下的.gradle和.AndroidStudio3.1/system两个文件夹。于是就悲剧了,重新打开项目发现许多系统的类和方法都爆红,赶紧打开其他项目,发现所有的项目都是如此,但是能够正常的编译运行。老的问题没有解决,又出现了新的问题,好心累。在网上找了找,AndroidStudio 代码报错(引入红色),但可正常运行解决方法(4种方式)吸引了我,点进去一看,我觉得第4步应该能解决我的问题(因为前3个都试过了嘛,.gradle文件夹我又从别的电脑上copy了一份放进去),删除项目中的.gradle和.idea两个文件夹,重新编译。果然不爆红了,问题解决。回过头来,重新运行我的demo,==AAPT2 error==又重新出现了,这次我认真的看了下日志:

error: style attribute 'attr/windowFullscreen (aka com.sakuraqh.demo:attr/windowFullscreen)' not found.
Message{kind=ERROR, text=error: style attribute 'attr/windowFullscreen (aka com.sakuraqh.demo:attr/windowFullscreen)' not found., sources=[C:\Users\SacuraQH\.gradle\caches\transforms-1\files-1.1\appcompat-v7-27.1.1.aar\c6c89f71778e8a7447d60fd602697a1f\res\values\values.xml], original message=, tool name=Optional.of(AAPT)}

提示我没有windowFullscreen这个属性,在我自己的attr文件和v7包中都没找到。(本来使用的时候就应该有命名空间的,只是 ==自定义属性在styles.xml中不需要命名空间,直接用属性名就可以了==)这时我才发现,我这部分style代码是直接从系统文件中copy出来的

D:/AndroidStudio_2.3/sdk/platforms/android-27/data/res/values/themes.xml:468

没有做任何修改,仅仅是添加了一个parent,而没有在属性前加上命名空间android: 所以正确的写法应该是

    <style name="Fullscreen" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowFullscreen">true</item>
        <item name="android:windowContentOverlay">@null</item>
    </style>

至此,问题全部解决。有时候无意中忽略的小问题真是能折腾人好半天,写代码还得细心,找bug还得耐心。
* 补充参考文章:Android总结:命名空间

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值