TypedArray getColor 总是返回 defValue

Posted

技术标签:

【中文标题】TypedArray getColor 总是返回 defValue【英文标题】:TypedArray getColor always returns defValue 【发布时间】:2016-07-12 04:25:20 【问题描述】:

在我的 XML 元素中,我尝试通过 colors.xml 资源文件中的颜色。 getColor 函数总是返回 defValue,即使它应该返回 colors.xml 中给出的颜色。

代码

TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.accordion);
final int col_pressed = a.getColor(R.styleable.accordion_buttonColorPressed, Color.BLACK);
final int col_unpressed = a.getColor(R.styleable.accordion_buttonColorPressed, Color.YELLOW);
btn.setBackgroundColor(col_unpressed);

主要 XML

<mika.actual.AccordionWidget
    xmlns:accordion="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android"
    accordion:text_color="@color/text_color"
    accordion:buttonColorPressed="@color/button_pressed"
    accordion:buttonColorUnpressed="@color/button_not_pressed"
    android:background="#FFFFFFFF"
    android:layout_
    android:layout_
    android:orientation="vertical"> ... </mika.actual.AccordionWidget>

colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#3F51B5</color>
    <color name="colorPrimaryDark">#303F9F</color>
    <color name="colorAccent">#FF4081</color>

    <color name="text_color">#FFFFFF</color>
    <color name="button_pressed">#666666</color>
    <color name="button_not_pressed">#BBBBBB</color>
</resources>

attrs.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="accordion">
        <attr name="text_color" format="color"/>
        <attr name="buttonColorPressed" format="color"/>
        <attr name="buttonColorUnpressed" format="color"/>
    </declare-styleable>
</resources>

【问题讨论】:

您是否尝试转储attrs? (使用getAttributeCountgetAttributeNamegetAttributeValue 【参考方案1】:

这是一个旧线程,但没有人回应。我会的,所以观众可以有答案 我认为您只需像这样将所有accordion: 更改为app:

app:text_color="@color/text_color"
app:buttonColorPressed="@color/button_pressed"
app:buttonColorUnpressed="@color/button_not_pressed"

【讨论】:

我一直没有使用android,但我认为它是accordion而不是app,因为同一XML中的这条线:xmlns:accordion="http://schemas.android.com/apk/res-auto"(通常是xmlns:app="http://schemas.android.com/apk/res-auto"

以上是关于TypedArray getColor 总是返回 defValue的主要内容,如果未能解决你的问题,请参考以下文章

Android getColor不一致

在 C# 中将 (Javascript)TypedArray 字符串转换为 byteArray 的最佳方法

在java中UIManager.getColor("Tree.textBackground")是啥意思?

不推荐使用 getResources().getColor() [重复]

调用android的getColor()方法出现 java.lang.NoSuchMethodError: android.content.res.Resources.getColor

二进制数据(ArrayBuffer + TypedArray + DataView)