You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

创建自定义属性时出现“No resource found that matches the given name”错误

问题原因与解决办法

这个问题我之前也踩过坑,根源很明确:你给enum定义的name属性里包含了冒号(:),这违反了Android资源系统的命名规则。

Android的资源体系里,冒号是有特殊用途的——它用来区分自定义属性的命名空间(比如布局里写app:columns_ratio="xxx"时,app:就是命名空间前缀),同时资源命名本身也不允许包含冒号这种特殊符号。当你把1:1、1:2这类值作为enum的name时,编译系统会错误地把冒号前后的内容解析成「资源类型:资源名称」的结构,它会尝试去查找id为1的资源类型下名为1、2的资源,这显然不存在,所以就抛出了processDebugResources的异常。

修复方案

把enum的name改成不含冒号的合法命名就行,比如用下划线替代冒号,或者直接用更清晰的命名:

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <declare-styleable name="my_image">
    <attr name="columns_ratio" format="enum">
      <enum name="ratio_1_4" value="3"/>
      <enum name="ratio_1_3" value="2"/>
      <enum name="ratio_1_2" value="1"/>
      <enum name="ratio_1_1" value="0"/>
    </attr>
  </declare-styleable>
</resources>

之后在布局里引用的时候,就用你修改后的name值:

<com.yourpackage.MyImageView
    app:columns_ratio="ratio_1_1"
    <!-- 其他属性 -->
/>

如果需要在界面或者日志里显示1:1这种格式,完全可以在代码里做映射:比如拿到columns_ratio的value后,用一个Map把0对应到"1:1",1对应到"1:2",以此类推,这样既符合资源命名规则,又能满足显示需求。

内容的提问来源于stack exchange,提问作者etrusks

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:55:12