如何制作一个形状的纯色是已定义颜色的50%alpha?

时间:2017-12-03 16:26:12

标签: android android-view android-resources android-styles android-color

我有一个在drawable资源文件中定义的形状,我用它作为TextViews的背景(scrim_background.xml):

<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid
        android:color="@color/colorAccent"/>
</shape>

我的colors.xml是:

<?xml version="1.0" encoding="utf-8"?>
<resources>


    <color name="white">#fff</color>
    <color name="light_text">#dfff</color>

    <color name="colorPrimary">@color/primary</color>
    <color name="colorPrimaryDark">@color/primary_dark</color>

    <color name="colorAccent">@color/accent</color>


    <color name="primary">#F44336</color>
    <color name="primary_dark">#D32F2F</color>
    <color name="primary_light">#FFCDD2</color>
    <color name="accent">#607D8B</color>

    <color name="accentAlpha">#DD607D8B</color>
    <color name="primary_text">#212121</color>
    <color name="secondary_text">#757575</color>
    <color name="icons">#FFFFFF</color>
    <color name="divider">#BDBDBD</color>

</resources>

我的textviews的样式是:

<style name="BeerItemTextStyleTitle" parent="@android:style/TextAppearance.Medium">
        <item name="android:textColor">@color/light_text</item>
        <item name="android:textStyle">bold</item>
        <item name="android:background">@drawable/scrim_background</item>
        <item name="android:gravity">start|center_vertical</item>
        <item name="android:paddingStart">@dimen/space_small</item>
        <item name="android:paddingEnd">@dimen/space_small</item>
    </style>

我希望背景颜色具有50%透明度的colorAccent。

类似的东西:

<color name="accent">#88607D8B</color>

但我不想修复这些值,因为我不断改变配色方案。

我尝试将alpha直接添加到我的TextView中,例如:

<item name="android:alpha">50</item>

但它不合适,因为它也为Text Color添加了透明度。我希望只有背景颜色是透明的。

我不想以编程方式执行此操作,因为这样我必须找到所有文本视图并逐个更改。

- 编辑 -

我尝试创建名为bitmap_scrim_background的元资源文件:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <bitmap
            android:src="@drawable/scrim_background">
        </bitmap>
    </item>
</layer-list>


<style name="BeerItemTextStyleTitle" parent="@android:style/TextAppearance.Medium">
    <item name="android:textColor">@color/light_text</item>
    <item name="android:textStyle">bold</item>
    <item name="android:background">@drawable/bitmap_scrim_background</item>
    <item name="android:gravity">start|center_vertical</item>
    <item name="android:paddingStart">@dimen/space_small</item>
    <item name="android:paddingEnd">@dimen/space_small</item>
</style>

但我认为在Android中事情不会这样做......它会抛出:

android.view.InflateException: Binary XML file line #36: Binary XML file line #36: Error inflating class TextView
                                                                                       Caused by: android.view.InflateException: Binary XML file line #36: Error inflating class TextView

Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #5: <bitmap> requires a valid 'src' attribute

4 个答案:

答案 0 :(得分:1)

我猜这个稀松布背景是一个可绘制的xml文件。您可以在可绘制文件中使用accentColor。

例如

<shape
    xmlns:android="http://schemas.android.com/apk/res/android">
    <gradient
    android:angle="90"
    android:centerY="0.3"
    android:startColor="@color/accent"
    android:endColor="#00000000"
    android:type="linear"/>
</shape>

答案 1 :(得分:1)

您可以使用以下方式以编程方式执行此操作:

textView.getBackground().setAlpha(50);

答案 2 :(得分:1)

你看过ColorUtils.setAlphaComponent()吗?

int setAlphaComponent (int color, int alpha)

您可以使用以下方式查询任何颜色:

int x = getColor(R.color.yourColor)

然后使用以下命令创建该颜色的任何alpha版本:

int newX = ColorUtils.setAlphaComponent(x, newAlpha);

答案 3 :(得分:1)

使用它来创建滚动条缩略图 50% 透明与现有的非透明颜色

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle"
    android:tint="@color/color_white_alpha_50"   //#80FFFFFF
    android:tintMode="multiply">
    <solid android:color="?colorControlNormal" />
    <corners android:radius="2dp" />
</shape>