再谈android studio抽取字符串方法

本文探讨了在Android Studio中如何将硬编码的文本(Hardcode)抽取到string.xml文件中进行国际化处理。介绍了标准的提取方法,即通过代码行左侧的灯泡提示进行操作。尽管没有一键提取所有字符串的功能,但可以使用Lint检查来查找硬编码的文本。作者提出,批量提取的实现可能受到文件间弱关联的影响,并建议Android Studio未来能提供此类功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

安卓app也有国际化问题,即app界面随手机显示的语种(中文、英文等),自动变更菜单语言。android studio中的做法,是把写死的textview文本控件的值(Hardcode), 如android: text="lol", 提取到string.xml中。

标准的做法是把光标移动到含Hardcode的代码行内,代码行左侧就会浮现一个灯泡。

鼠标移动到灯泡上,会提示按 Alt+Enter组合键完成提取,或

 鼠标点击灯泡,选择“Extract string resource"选项。

在Extract Resource对话框中设置好各种名称和值后,

结果是被提取的代码行变成: 

android:text="@string/lol"

并且,string.xml中多了一行:

<string name="lol">lol</string>

       一般是在app编写的最后,才把字符串全部提取出来。然而,搜了很多网站,即使stackflow上不能提供一键提取所有字符串的方法。 最多是在as中先把所有字符串检索出来,再逐一点击提取(Analyze - Run Inspection by Name... - 输入Hardcoded text Android Lint);而且,这个方法还不适用于java文件。

     很奇怪as为什么没有批量提取的菜单选项。

     从原理上说,只需在所有.xml文件中查找形如android:text=" "的代码,在.java文件中筛选出带.setText(""),addText("")等等的代码,就可以批量替换了。 

     as中各文件中变量名称的弱关联或许是一个原因。 比如,刚才举例的两行代码:

activity_main.xml中被提取的代码行: android:text="@string/lol"
对应string.xml中:                                  <string name="lol">lol</string>

如果在activity_main.xml中修改text的值,string.xml的代码不会发生任何变化;反之,如果删除string.xml中的<string name=...>这行代码,在activity_main.xml的文本值@string/lol会变为红色,但不会自动转化为hardcode.

 从远离来说,android studio设置一个全部提取字符串的值,对as平台设计者来说,是可能的。前提是被提取字符串被修改、或删除后,string.xml中的相应string name行随之更改、去掉。如果考虑系统提取效率,菜单也可以设置可中断和续借的提取流程。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值