将ColorPrimary(操作栏颜色)设置为透明会导致异常

时间:2017-07-22 22:48:34

标签: android android-layout android-actionbar android-styles android-actionbar-compat

我正在尝试将操作栏颜色设置为透明,因此它将与背景颜色相同,并且还会与渐变背景混合。

我尝试过这样的事情:

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@android:color/transparent</item>
</style>

当我运行我的应用程序时,它启动,加载屏幕一秒钟(所有渲染都正确,操作栏是透明的),然后崩溃到以下异常:

java.lang.IllegalArgumentException: background can not be translucent: #0

追踪我的项目的相关课程。 如果我将参数设置为纯色,一切正常。 你能帮我解决这个问题吗?我找不到任何解决方案。

感谢。

1 个答案:

答案 0 :(得分:1)

由于ActionBar背景透明,但由于colorPrimary透明,并且使用MediaRouter lib,您的应用不会崩溃。

MediaRouterThemeHelper.getControllerColorMediaRouterThemeHelper.getButtonTextColor都会调用ColorUtils.calculateContrast,这是IllegalArgumentException来自的地方。

ColorUtils.calculateContrast需要完全不透明的颜色才能正确计算对比度,只需基于formula being usedMediaRouterThemeHelper使用colorPrimary来确定如何主题{{1控制器和按钮文本颜色。

看起来您使用的是MediaRouter样式,因此我假设您使用的是NoActionBar而只是将Toolbar设置为background 。相反,您可以直接使用colorPrimary并将@android:color/transparent更改为不透明的内容。