【问题标题】:Android: Button background XML sometimes loses alpha when setting color filterAndroid:设置颜色过滤器时,按钮背景 XML 有时会丢失 alpha
【发布时间】:2014-07-08 00:25:22
【问题描述】:

我遇到了一个非常奇怪的问题,可能是一个错误。我有一个可绘制资源,用作应用程序中按钮的背景。这是 XML,非常简单:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <stroke
        android:color="@color/white"
        android:width="5dp" />
    <padding
        android:left="10dp"
        android:right="10dp" />
    <corners android:radius="8dp" />
</shape>

我正在尝试让用户同时设置应用程序的前景色和背景色,所以这就是我更新颜色的方式:

int foreground = getSharedPreferences("prefs", MODE_PRIVATE).getInt("foreground", 0);
_buttonOptions.setTextColor(foreground);
_buttonOptions.getBackground().setColorFilter(foreground, PorterDuff.Mode.MULTIPLY);

直到几个小时前,它一直运行良好。当我运行我的应用程序时,drawable 给自己一个黑色背景,我似乎无法摆脱它。

我已经尝试了所有我能想到的方法,但黑色仍然存在。我什至没有做任何可以让这件事发生的事情。我在它改变的时候唯一做的就是将按钮的文本样式设置为粗体。我试着把它改回来,但这没有帮助。有趣的是,我还尝试将滤色器模式更改为 SRC_ATOP,它为整个按钮区域着色。所以就好像 alpha 通道完全消失了一样。

无论如何,我不知道为什么会发生这种情况,因此我认为这可能是一个错误。大家觉得呢?

编辑:问题仅在设置颜色过滤器时出现。如果我注释掉那条线,它就可以正常工作(当然,减去我需要的颜色)。

【问题讨论】:

  • 你调试过看“foreground”的值吗?如果在 sharedPreferences 中没有找到它,它将返回 0,即透明黑色。但我不确定使用 Mutiply 混合的透明度如何表现
  • "foreground" 是案例中的红色。我没有弄乱背景颜色;它应该是透明的。它应该适用于乘法混合,或者至少它在今天早些时候可以正常工作。

标签: android xml android-drawable


【解决方案1】:

好的,我已经解决了这个问题。我必须明确地向可绘制对象添加透明背景,然后清理项目。所以 XML 现在看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="@android:color/transparent" />
    <stroke
        android:color="@color/white"
        android:width="5dp" />
    <padding
        android:left="10dp"
        android:right="10dp" />
    <corners android:radius="8dp" />
</shape>

我之前尝试过,但它没有做任何事情,因为我没有清理项目,所以我认为它根本没有工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-14
    • 2015-04-06
    • 1970-01-01
    • 2013-08-06
    • 2021-05-10
    • 1970-01-01
    • 2021-10-29
    • 1970-01-01
    相关资源
    最近更新 更多