我有一个模式,我最近在我的应用程序中使用了很多,以便将Enum值映射到某些资源。因此,我可以简单地询问" MyStateEnum.ACTIVE"的主要文本颜色,而不是在我的代码中使用开关。或者其他一些。
现在我将某个枚举的全名(com.example.app.MyStateEnum.ACTIVE)转换为资源名称(com_example_app_mystateenum_active
)并附加" name"我想要的东西(primary_text_color
)然后通过getResources().getIdentifier(enumName+"_"+thingName, "color", getPackageName())
运行它给我一个我需要获取我想要的资源的ID。
然而getIdentifier()
与使用R.color.com_example_app_mystateenum_active_primary_text_color
相比较慢,所以我想找到更好的方法。
我认为更好的方法是以与生成R相同的方式生成代码 ,以便我可以更轻松地访问ID。我认为这样的事情会奏效:
colors.xml:
<color name="some_name"
ex:use="primary_text_color"
ex:value="com.example.app.MyStateEnum.ACTIVE">#FF00FF</color>
<color name="some_name_default"
ex:use="primary_text_color">#FF0000</color>
something.java
int activeColor = getResources().getColor(X.color.primary_text_color.getForEnum(MyStateEnum.ACTIVE)); //#FF00FF
int activeColor = getResources().getColor(X.color.primary_text_color.getForEnum(MyStateEnum.INACTIVE)); //#FF0000
(我讨厌挑选名字,但你明白了)。我会喜欢让这些值自动更新,如同R
一样。
我的问题是,我很难找到任何建议我应该从哪里开始。我不确定这是不是问你错误的问题&#34;或者&#34;之前没有人想要这样做,所以开始阅读android插件的源代码&#34;。