gpt4 book ai didi

android - 如何在代码中获取在 attrs.xml 中创建的枚举

转载 作者:IT老高 更新时间:2023-10-28 13:06:20 27 4
gpt4 key购买 nike

我创建了一个自定义 View (找到它 here),它具有 enum 类型的可声明样式属性。在 xml 中,我现在可以为我的自定义属性选择枚举条目之一。现在我想创建一个以编程方式设置此值的方法,但我无法访问枚举。

attr.xml

<declare-styleable name="IconView">
<attr name="icon" format="enum">
<enum name="enum_name_one" value="0"/>
....
<enum name="enum_name_n" value="666"/>
</attr>
</declare-styleable>

layout.xml

<com.xyz.views.IconView
android:id="@+id/heart_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:icon="enum_name_x"/>

我需要的是:mCustomView.setIcon(R.id.enum_name_x);但是我找不到枚举,或者我什至不知道如何获取枚举或枚举的名称。

最佳答案

似乎没有一种从属性枚举中获取 Java 枚举的自动化方法 - 在 Java 中,您可以获得您指定的数值 - 该字符串用于 XML 文件(如您所示)。

您可以在 View 构造函数中执行此操作:

TypedArray a = context.getTheme().obtainStyledAttributes(
attrs,
R.styleable.IconView,
0, 0);

// Gets you the 'value' number - 0 or 666 in your example
if (a.hasValue(R.styleable.IconView_icon)) {
int value = a.getInt(R.styleable.IconView_icon, 0));
}

a.recycle();
}

如果您希望将值放入枚举中,则需要自己将值映射到 Java 枚举中,例如:

private enum Format {
enum_name_one(0), enum_name_n(666);
int id;

Format(int id) {
this.id = id;
}

static Format fromId(int id) {
for (Format f : values()) {
if (f.id == id) return f;
}
throw new IllegalArgumentException();
}
}

然后在第一个代码块中你可以使用:

Format format = Format.fromId(a.getInt(R.styleable.IconView_icon, 0))); 

(虽然此时抛出异常可能不是一个好主意,但最好选择一个合理的默认值)

关于android - 如何在代码中获取在 attrs.xml 中创建的枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18382559/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com