概述
最近开始闲下来,想要做一件事情,就是修复android studio上的一些警告,也让自己的代码更加规范,先从简单的找起。今天就把xml中关于字符串的警告去除了吧。
不想在string.xml中写那么多文字怎么办
刚开始做安卓的时候,都是直接在布局文件中写:
android:text="fuck"
但是写完了之后
AndroidStudio出现了一根黄色的小线,有些人可能就不管了,看着这个颜色,兴致勃然,继续写其他页面,但是对于一个有代码洁癖的人,实在忍不了,而且这个官方规范让你不要这么写啊,怎么办,按照他的要求改吧,老老实实在string.xml中找个坑位写一段文字,然后回来再引用添加。
但是。。。我真的有时候只是想要测试一下控件的显示效果,根据设计稿写个页面,用文字暂时填充一下,看下预览效果,来回切换写string.xml实在太TM麻烦了,怎么办?不要方,有办法:
首先在layout根布局加一行(如果没有自动生成的话):
xmlns:tools="http://schemas.android.com/tools"
接着在你想要添加文字的控件内添加:
tools:hint="fuck"
没有警告,没有提示,干干净净的,世界都变美好了。
我已经在string.xml中写了,怎么又出现了黄色的警告
有时候写一些符号,总是会出现警告,比如:
怎么办,直接按照它的要求来吧,替换就是了,这个时候碰到一个有些恶心的问题,我想复制,先按Ctrl+F11,然后鼠标选中一松开提示框就消失了,坑爹,只好在选中后鼠标一直按住不松开,ctrl+C再松开,就可以了,(不知道有没有其他办法复制这种警告提示,求告知)
Quantity Strings(Plurals)复数的用法
直接上代码:
<plurals name="countOfGirlfriend"> <item quantity="zero">no girlfriend</item> <item quantity="one">one girlfriend</item> <item quantity="other">many girlfriends</item> </plurals>
然后在我们代码中获取数量并填入就可以了:
int count = getGirlfriends(); String girlfriendCount = getResources().getQuantityString(R.plurals.countOfGirlfriend); tvCount.setText(girlfriendCount);
quantity的有效值,可见这张表
(来自谷歌官方文档)
然并卵,我在代码中怎么传count的大小,返回的都是many girlfriends(幸福的烦恼,渣男的代表),再查看文档时发现,某些语言(如中文)根本不做这些语法区分,因此您获取的始终是 other 字符串。而且上面的截图上面也清楚的提示了。所以,在中文的环境中基本用不着它。
String.format(String,Object...)的用法
有很多时候,接口返回的数据只是一个int或者double类型,但是我们填充时候,前面或者后面的字符串都是固定的,类似于填空。什么意思,比如,你想要输出一部降龙十八掌的招数,你就可以这么干(降龙十八掌的命名太难,求支招):
<string name="xlsbz">降龙十八掌第%1$d式,%2$s</string>
%1s 表示一个字符串;1和2表示代码中传参的位置顺序。
这时候,接口返回数据了,你就可以这么做了
Resource res = getResources(); String text = String.format(res.getString(R.string.xlsbz),number,name); 只需要传入第几式和名字就可以输出完整输出降龙十八掌的所有招式了,比如1,亢龙有悔;2,飞龙在天...
平时用到最多的就是字符串和十进制的整数了,当然还有其他一些常用转换符,如下:
(截图来源,JAVA字符串格式化-String.format()的使用)
关于String.format()中转换符的标志(即%1),也可以参考截图来源的博客,对我来说,项目中基本只用了$
HTML标记的用法
我们在很多注册界面都会有一个《同意...协议》,有的要求要加下划线,我是这么设置的;
<string name="agree_protocol">《<u>同意卖身契协议<u>》<string>
除了下划线,还有粗体<b>(粗体)和<i>(斜体)等HTML元素的支持。
如果我想要输入或显示出来的本来需要包含了<b>这些特殊字符怎么办,看官方文档,描述的非常详细;
HTML中还有一个不为人知的用法,比如一个TextView的文字,需要输入七个文字“红橙黄绿青蓝紫”,但是每个文字对应自己的颜色,看图:
我们第一反应估计是,冲着产品说:“哥们,你直接给我一张图吧,这太麻烦了”;要是产品说不行,怎么办?我们只能自给自足了,好了,那就直接轮流取文字的下标,用ForegroundColorSpan一个文字一个文字的设置颜色,真心太麻烦了,怎么办,有办法!
<string name="colors" <![CDATA[<font color=red>红</font><font color=\'#ff7f00\'>橙</font><font color=yellow>黄</font><font color=green>绿</font><font color=cyan>青</font><font color=blue>蓝</font><font color=purple>紫</font>]]></string>
写完后,再到代码中进行设置:
tv.setText(Html.fromHtml(getString(R.string.colors)));
搞定,轻松加愉快!
两点需要解释一下:
1.关于CDATA的解释:
1)所有 XML 文档中的文本均会被解析器解析;
只有 CDATA 区段(CDATA section)中的文本会被解析器忽略。
2)CDATA 部分由 "<![CDATA[" 开始,由 "]]>" 结束:
3)CDATA 部分不能包含字符串 "]]>";也不允许嵌套的 CDATA 部分。
标记 CDATA 部分结尾的 "]]>" 不能包含空格或折行。
这在w3school文档中有详细解释XML CDATA
2.color='#ff7f00' 中的转义,直接看官方文档
清晰明了,一目了然!
基本上,项目中可以用到的就是这些了,花点时间写下来,也算是加深自己的理解吧,其实基本上就是按照谷歌官方文档,结合自己碰到的问题,还有一些博客的参考!希望有猿人看到可以提醒一下,补全一些!
参考文档和博客
写博客确实不容易,虽然是从简单的方面入手,但也希望可以坚持写,要不然闲下来,很容易陷入程序猿的中年危机,哈哈哈!