当前位置: 首页 > 知识库问答 >
问题:

无法使用?可绘制的自定义颜色

帅博远
2023-03-14

我正在尝试为我的应用程序的主题定义自定义颜色。我是这样做的:

定义自定义属性:

<declare-styleable name="ApplicationStyle">
    <attr name="colorWeekdaysBg" format="color"/>
</declare-styleable>

定义应用程序样式:

<style name="ApplicationStyle" parent="Theme.AppCompat.NoActionBar">
    <item name="android:editTextStyle">@style/EditTextStyle</item>
    <item name="colorPrimaryDark">@color/dark_blue</item>
    <item name="colorPrimary">@color/dark_blue</item>
    <item name="colorAccent">@color/dark_blue</item>
    <item name="colorWeekdaysBg">@color/access_weekdays</item>
</style>

在清单中设置样式:

<application
    android:name=".App"
    android:icon="@drawable/icon_launcher"
    android:label="@string/app_name"
    android:theme="@style/ApplicationStyle">

在可绘制xml中使用此属性:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:right="-1dp">
        <shape android:shape="rectangle">
            <stroke
                android:width="1dp"
                android:color="?colorWeekdaysBg" />

            <corners
                android:bottomLeftRadius="100dp"
                android:topLeftRadius="100dp" />

        </shape>
    </item>
</layer-list>

但出于某种原因,它不适用于我的颜色绘图。它应用了透明的颜色。

还有一件奇怪的事,如果我替换我的?colorWeekdaysBg一起使用?colorAccent,在主题中定义。AppCompat,则应用正确的颜色。

最后一个问题是:你知道为什么它不起作用,以及如何修复它吗?

共有1个答案

葛浩阔
2023-03-14

根据mudit给出的答案,这是Lollipop前操作系统中的一个bug
这在谷歌的问题追踪器中有报道。

在有AndroidLollipop和以上操作系统版本的设备中,它可以正常工作。

检查以下代码:

attr。xml

<declare-styleable name="AppTheme">
        <attr name="colorWeekdaysBg" format="color|reference" /> <!-- Or you can keep color only. It will be ok -->
    </declare-styleable>

必须在v21样式文件中设置属性。也许你错过了这个
v21\styles。xml

<!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <item name="android:splitMotionEvents">false</item>
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
        <item name="android:navigationBarColor">@color/black</item>
        <item name="colorWeekdaysBg">@color/access_weekdays</item>
    </style>

创建两个可绘制文件,使其在所有设备上工作。一个用于普通,即Lollipop前版本,另一个用于Lollipop及以上版本,即v21可拉丝。

你的画是可以画的。在这种情况下,您必须从颜色文件中设置颜色。

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:right="-1dp">
        <shape android:shape="rectangle">
            <stroke
                android:width="1dp"
                android:color="@color/access_weekdays" />
            <corners
                android:bottomLeftRadius="100dp"
                android:topLeftRadius="100dp" />
        </shape>
    </item>
</layer-list>

v21\您的\u可绘制。在这个文件中,您可以像以前一样设置自定义属性。

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:right="-1dp">
        <shape android:shape="rectangle">
            <stroke
                android:width="1dp"
                android:color="?colorWeekdaysBg" />
            <corners
                android:bottomLeftRadius="100dp"
                android:topLeftRadius="100dp" />
        </shape>
    </item>
</layer-list>

你的布局。在您的布局中,您可以如下所示提供可绘制的xml

<Button
    android:id="@+id/btnTest"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/your_drawable"
    android:text="Test Text" />

现在检查你问题的答案。

但出于某种原因,它不适用于我的颜色绘图。它应用了透明的颜色。

  • 因为您可能没有在v21样式中定义属性。xml文件

还有一件奇怪的事,如果我替换我的?colorWeekdaysBg一起使用?colorAccent,在主题中定义。AppCompat,然后应用正确的颜色。

  • Android Studio在预览中显示颜色,但当您运行应用程序并到达该屏幕时,您的应用程序将因错误而崩溃,导致类错误膨胀
    Android。看法充气异常:二进制XML文件行#68:充气类按钮出错

最后一个问题是:你知道为什么它不工作,以及如何修复它吗?

  • 我想现在你已经知道为什么它不起作用以及如何修复它了。
 类似资料:
  • 问题内容: 我有一个自定义的JPanel,有时在我的整个程序中,我需要调用一个将屏幕涂成黑色的方法,仅此而已。 启动程序时,我将调用此方法。 但是,我发现有时它起作用,有时却不起作用。这很奇怪。我还发现,当它不起作用时,图形对象不是null,并且宽度和高度也已正确定义(来自getWidth()和getHeight())。 为什么这有时行得通,有时却行不通? 在程序中的某个时候在JPanel上制作自

  • 如何在Flutter中添加十六进制值的颜色?例如,我正在尝试以下操作: 提前致谢

  • 本文向大家介绍Android使用GridLayout绘制自定义日历控件,包括了Android使用GridLayout绘制自定义日历控件的使用技巧和注意事项,需要的朋友参考一下 效果图 思路:就是先设置Gridlayout的行列数,然后往里面放置一定数目的自定义日历按钮控件,最后实现日历逻辑就可以了。 步骤: 第一步:自定义日历控件(初步) 第二步:实现自定义单个日期按钮控件 第三步:将第二步得到的

  • 问题内容: 我遇到以下问题,我想创建自己的颜色图(红色-混合-紫色-混合-蓝色),将其映射到-2到+2之间的值,并想用它来绘制绘图中的点。然后该图应具有右侧的色标。 到目前为止,这就是我创建地图的方式。但是我不确定是否混合颜色。 这样,我将颜色映射到值。 然后我将其绘制: 我的问题是: 1.我无法绘制色标。 2.我不确定我的色标是否正在创建连续的(平滑的)色标。 问题答案: 这里有一个有关如何创建

  • 我正在使用IText7从html字符串生成pdf。现在,我需要对段落应用自定义颜色和自定义字体或字体系列。 如何使用Itext7实现这一点? 谢谢

  • 问题内容: 我正在尝试将十六进制值转换为int,以便创建新的可绘制颜色。我不确定是否可以,但是根据文档,应该可以。它明确地要求 公共ColorDrawable(int颜色) 在API级别1中添加。创建具有指定颜色的新ColorDrawable。 参数 color 绘制的颜色。 因此,我的代码无法正常工作,因为我收到一个无效的int:“ FF6666”错误。有任何想法吗? 问题答案: 因为您在谈论十