Android的主题Theme遇到的问题:java.lang.IllegalStateException: You need to use a Theme.AppCompat theme

一、场景

最近在做BottomSheetDialog这个底部弹框的时候,在设置dialog的style的时候遇到一个问题:

 style的代码样式:

<!--评论弹框dialog的style-->
<style name="dialog" parent="@android:style/Theme.Holo.Dialog">
    <item name="android:windowFrame">@null</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:background">@android:color/transparent</item>
    <!--阴影  -->
    <item name="android:windowBackground">@android:color/transparent</item>
    <!-- Dialog进入及退出动画 -->
    <item name="android:windowAnimationStyle">@style/BottomShowAnimation</item>
    <!--弹窗背景是否变暗-->
    <item name="android:backgroundDimEnabled">true</item>
</style>

<!-- dialog从ios效果动画 -->
<style name="BottomShowAnimation" parent="@android:style/Animation.Dialog">
    <item name="android:windowEnterAnimation">@anim/enter_bottom_menu</item>
    <item name="android:windowExitAnimation">@anim/exit_bottom_menu</item>
</style> 

二、原因

运行报错:You need to use a Theme.AppCompat theme (or descendant) with this activity.

问题分析:我们观察发现BottomSheetDialog的源码:

发现这个类继承的是AppCompatDialog,而不是我们常见的Dialog这个类,所以看报错信息就知道,它的意思就是要我们的这个dialog依附的activity的主题必须得是Theme.AppCompat这样的主题,懂这个原因之后,我去查看了我的activity使用的主题:(这里要说明一下,如果你没在清单文件里面给你对应的activity设置主题的话,就会使用的是Application这个界面下面的总Theme主题,懂我意思吧?)我的activity继承的是FragmentActivity

 

 我这里是activity节点也使用了Theme,所以跟着进去看一下是不是我们的activity没有使用Theme.AppCompat这个相关的主题。

 

 进去一看,的确,因为这是个比较老项目,使用的主题都是android:Theme这个主题,没有使用到Theme.AppCompat,虽然我们不知道android的主题有什么不同,主题这块一直没搞懂,得找个时间补补知识点。

三、解决

 上面知道报错的原因之后我们就去解决:改主题

 其实android中改主题还是很慌的,担心会改动到其他地方,比如说样式的问题,有点主题有默认样式,你修改之后发现没了。比如说上面的android:textColorHint就在上面的那个android:Theme中默认就是灰色的,但是我使用这个Theme.AppCompat发现项目中的EditView的textColorHint默认是白色了,因为我没给EditView设置这个属性的颜色,就会使用主题中自带的颜色,所以我这里加上了这个属性<item name="android:textColorHint">@color/color_666666</item>灰色颜色值。

如果改完主题有其他问题就再继续解决。

四、总结

 发现问题------>分析问题------>解决问题。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值