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

为何Java中无法调用R.string.cancel/ok 但XML中可正常使用?

报错原因

Android 存在两套独立的 R 资源类:

  1. 你自己项目包名下的 R 类:对应res目录下你自行定义的所有资源,你默认调用的R.string.xxx就是引用这个类下的资源,你没有在自己的strings.xml中定义ok、cancel字段,自然会报找不到符号的错误。
  2. 系统框架的android.R类:对应Android系统内置的公共资源,你在XML中用的@android:string/ok就是引用的这个类下的资源。

就算你导入了import android.R.string;,只要代码文件顶部还保留了你自己项目的R类导入(比如import 你的包名.R;),同名资源类会优先匹配你自己项目的R类,所以问题依旧存在。

解决方法

你可以根据自己的使用场景选任意一种方案:

  • 优先推荐:直接用全限定名调用系统内置资源,不需要调整导入规则,代码中直接写android.R.string.ok、android.R.string.cancel即可,不会和你自己项目的资源产生冲突。
  • 简化调用写法:先删除代码文件顶部你自己项目的R类导入语句,再导入import android.R.string;,之后就可以直接用R.string.ok、R.string.cancel。注意这种场景下你要调用自己项目的字符串资源,需要写全自己项目R类的全限定名,比如com.你的包名.R.string.some_string_that_I_have_added_to_strings_xml。
  • 自定义文字内容:直接在你自己项目的strings.xml中添加两个对应字段:
<string name="ok">确定</string>
<string name="cancel">取消</string>

之后原来的R.string.ok、R.string.cancel就可以正常使用,还可以根据需求自定义文字内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 16:57:00