再谈android studio抽取字符串方法

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

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

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

再谈android studio抽取字符串方法_第1张图片

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

再谈android studio抽取字符串方法_第2张图片

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

再谈android studio抽取字符串方法_第3张图片

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

android:text="@string/lol"

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

lol

       一般是在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中:                                  lol

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

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

你可能感兴趣的:(android)