【问题标题】:Android theming: Can I just set alpha value to an existing color?Android 主题:我可以将 alpha 值设置为现有颜色吗?
【发布时间】:2015-01-30 20:57:54
【问题描述】:

因此,如果我正在为某些小部件定义样式并希望将文本颜色设置为某种预定颜色 + 某种透明度。 通常,我会这样定义它(过于简单):

<item name="android:textColor">#a0ffffff</item>

但是,我希望能够这样做:

<color name="textTitle">#ffffff</color>
<item name="android:textColor">#a0 | @color/textTitle</item>
<item name="android:someotherColor">#70 | @color/textTitle</item>

我希望 #a0#70 表示我想要的透明度,而 @color... 表示一些预定义的颜色(我可能不知道,因为它是特定于 ROM 的)

最好的方法是什么?

【问题讨论】:

  • 您的目标最低 SDK 级别是多少?
  • 没关系,真的,我会采取任何解决方案,否则我的目标是8+
  • 在 API 21+ 上,您可以在颜色状态列表项中设置 alpha,但这在早期版本中没有多大帮助。

标签: android theming


【解决方案1】:

你可以在你想使用的地方直接将颜色设置为@color/textTitle,并使用android:alpha单独设置alpha值。

【讨论】:

  • 你的意思是在我想使用它的每个小部件上?维护繁重,但它可以工作。
【解决方案2】:

支持库有辅助方法ColorUtils.setAlphaComponent(int color, int alpha)

这里是源代码。

/**
 * Set the alpha component of {@code color} to be {@code alpha}.
 */
public static int setAlphaComponent(int color, int alpha) {
    if (alpha < 0 || alpha > 255) {
        throw new IllegalArgumentException("alpha must be between 0 and 255.");
    }
    return (color & 0x00ffffff) | (alpha << 24);
}

【讨论】:

    猜你喜欢
    • 2020-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-31
    • 2014-07-06
    • 1970-01-01
    相关资源
    最近更新 更多