Android中如何查找带点分隔符的字符串资源键的引用?
解决Android Studio中带点字符串资源键与下划线引用的查找匹配问题
针对你团队遇到的统一字符串键(带点分隔)在Android Studio里无法直接关联下划线形式代码引用的问题,以下是几种无需修改现有键名约定的解决方案:
自定义结构搜索模板(Structural Search)
这是AS内置的精准匹配功能,能直接关联资源文件和代码中的对应关系:- 打开
Edit -> Find -> Search Structurally(或按Ctrl+Shift+S) - 点击
+新建模板组,再创建两个关联模板:- 资源文件模板:复制
<string name="$KEY$">$VALUE$</string>,选中$KEY$,右侧约束勾选「文本包含」并输入. - 代码引用模板:复制
R.string.$CODE_KEY$,选中$CODE_KEY$,右侧约束的「表达式」输入replace($KEY$, ".", "_")
- 资源文件模板:复制
- 保存模板后,每次搜索选择该模板,就能同时定位到strings.xml里带点的键和代码中对应的下划线引用
- 打开
Gradle任务生成键映射表
通过Gradle自动生成带点键与下划线键的映射文件,方便手动关联查找:
在app模块的build.gradle中添加以下任务:task generateStringKeyMapping { doLast { def stringsFile = file("src/main/res/values/strings.xml") def keyMap = new HashMap<String, String>() new XmlParser().parse(stringsFile).string.each { stringNode -> def dotKey = stringNode.@name def underscoreKey = dotKey.replace('.', '_') keyMap.put(dotKey, underscoreKey) } def outputFile = file("src/main/assets/string_key_mapping.json") outputFile.text = new groovy.json.JsonBuilder(keyMap).toPrettyString() } }执行
./gradlew generateStringKeyMapping后,assets目录会生成JSON映射文件,查找时可通过带点键快速定位对应的下划线引用,反之亦然。Live Templates统一引用生成
用Live Templates确保代码引用一致性,同时简化后续查找:- 打开
File -> Settings -> Editor -> Live Templates - 新建模板组,再创建模板:
- 缩写设为
strkey,模板内容填R.string.$UNDERSCORE_KEY$ - 点击「Edit variables」,设置
$UNDERSCORE_KEY$的表达式为replace($DOT_KEY$, ".", "_"),并勾选「Skip if defined」
- 缩写设为
- 后续输入
strkey按Tab,输入带点的原始键,AS会自动生成下划线形式的引用;搜索原始带点键时,可直接关联所有通过该模板生成的代码引用。
- 打开
第三方插件自定义匹配规则
部分AS插件支持自定义资源搜索规则,比如「String Resource Helper」,可在设置中添加替换规则:将搜索关键词中的.自动替换为_后执行搜索,直接搜带点的键就能找到代码里的下划线引用。
内容的提问来源于stack exchange,提问作者Karolis
相关产品推荐
相关产品推荐

