安卓资源ID

68
我正在从自定义的 XML 视图类型中检索自定义资源 ID。我被要求为检索指定默认 int 值,并想知道 ID 的范围是什么?它们总是正数还是包括零?即-1 是否为有效的“空”引用,0 是否为有效的“空”引用?
谢谢。
编辑
自定义 XML 资源/属性文件。
<resources>
    <declare-styleable name="ToggleImageButton">
        <attr name="onImage" format="integer" />
        <attr name="offImage" format="integer" />
    </declare-styleable>
</resources>

这是我为我的自定义界面构造函数中定义的。

TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ToggleImageButton);

int offResource = a.getInt(R.styleable.ToggleImageButton_offImage, -1);

基本上第二行末尾的-1是这种数据类型的默认参数。在开发时,在XML视图中可能会初始化它,这样可以通过这种方式指定默认行为。


-1 应该足够安全,尽管我找不到任何关于此的文档。 - xandy
XML基于的资源ID不是总是自动生成并存储在R.java中吗?“我被要求指定默认int值”是什么意思 - 如果您能展示代码行,那会很有帮助。 - DJC
@DJC,在检索非空值时,Android更倾向于使用默认值而不是抛出异常。 - xandy
3个回答

101

根据文档Resources.getIdentifier()

如果未找到此类资源,则返回0。(0不是有效的资源ID。)

更新(在5年后感谢Micer):

  • API 29 +:Resources.ID_NULL常量
  • 旧API:ResourcesCompat.ID_NULL

最好使用 @Micer 提到的 ID_NULL - ThomasW
正如这里的一些人所提到的,对于API 29+,请使用Resources.ID_NULL常量。对于早期版本,请使用ResourcesCompat.ID_NULL。或者如果你想要一个傻乎乎的心情,直接使用0也可以。 - David Read

13

0是资源ID的空/无效值。


8
Android资源ID始终具有包标识符,因此它们的值不能为0。 - Romain Guy

4

3
很遗憾,该常量仅适用于API 29+。 - Josh
8
对于旧版的API,它可以在ResourcesCompat中作为androidx.core.content.res.ResourcesCompat.ID_NULL使用。 - Micer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接