为什么要写这一篇随笔呢?最近做项目的过程中,遇到很多页面在要显示文本时,有一部分是固定的文本,有一部分是动态获取的,并且格式各式各样。一开始采取比较笨的办法,把他拆分成一个个文本控件,然后对不同的控件采用不同的样式。这样做效率

很低,并且文本之间的对齐是个很大的问题,后来到网上寻求帮助,找到一些有关Android字符串和字符串资源格式化的文章,在此做一个总结。

一.字符串格式化

Java的String类给我们提供了两个重载的格式化字符串的方法,可以通过占位符的方式,向固定字符串中传入参数。他们分别是:

format(String format, Object... args) 新字符串使用本地语言环境,制定字符串格式和参数生成格式化的新字符串。

format(Locale locale, String format, Object... args) 使用指定的语言环境,制定字符串格式和参数生成格式化的字符串。

例如:

字符串占位符%s :System.out.println("Hi,%s", "王力")  输出  Hi,王力

十进制整形占位符%d :System.out.println("我今年%d岁", 20)  输出  我今年20岁

浮点型占位符%f:System.out.println("荔枝的价格是 %f 元", 3.5)  输出 荔枝的价格是3.5元

还有其他字符型,整形,日期格式等等格式化方法,再次就不一一举例了。

二.带HTML标签的字符串格式化

当我们需要对一段文字的部分文字进行字体颜色,字形,字体风格设置时,我们可以使用HTML标签,然后在输出的时候,通过Html.from方法解析为html字符串。

例如:

String str = "后面的文字是加粗的红色文字:" + "<font color='#ff0000'><b>加粗红色文字</b></font>";

在文本控件输出的时候,我们需要解析一下

CharseQuence  cq=Html.from(str);

textView.setText(cq);

第一种情形和第二种情形可以结合起来使用:

String str = "后面的文字是加粗的红色文字:" + "<font color='#ff0000'><b>%s</b></font>";

String str2=String.format(str,"红色加粗文字");

输出与上面一样.

三.字符串资源的格式化

我们在字符串资源中同样可以通过占位符来给字符串传入参数,不过与第一种方式相比,占位符的格式略有不同

我们使用%[index]$[type]格式进行标记,index标记替换资源中第index个资源对应的位置,type则标示所要替换的资源的类型(s表示资源为字符串格式)

例如:

<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello World, my name is %1$s!</string>
<string name="app_name">MyString</string>
</resources>
TextView mytext = (TextView)findViewById(R.id.mystring);
String myname = getString(R.string.hello);
myname = String.format(myname, "yinghui");
mytext.setText(myname);

如果需要同时传入多个参数,则需要改变index,顺序一一对应。例如%1$s  %2$s等等

四.带HTML标签的字符串资源的格式化

由于Android开发中的字符串资源是保存在XML文件中,因为Html中的<, >,&有特殊含义,(前两个字符用于链接签,&用于转义),不能直接使用。使用这三个字符时,应使用它们的转义序列。

例如:

我们需要在XML中保存这个字符串<b>我是加粗文字</b> 需要将<转义为&lt;或者< ,需要将>转义为&gt;或者&#62(这里也可以不转义)

代码:

<string name="format2">&lt;b&gt;我是加粗文字&lt;/b&gt;</string>

需要说明的是:
    a. 转义序列各字符间不能有空格;
    b. 转义序列必须以“;”结束;
    c. 单独的&不被认为是转义开始。
    d. 区分大小写 

常见的转义字符见下表:

字符 实体名字 十进制字符编号
& &amp; &
< &lt; <
> &gt; >
单引号 &apos '
" &quot; "
空格 &nbsp  
版权符 &copy ©
注册符 &reg ®

使用方法

String str=getString(R.string.format2);
CharseQuence cq=Html.from(str);
textView.setText(cq);

通过灵活运用以上字符串格式化的技巧,我们可以加快开发的效率,提高界面布局的美观程度。

参考资料:

http://blog.csdn.net/wsywl/article/details/6555959

http://blog.163.com/djx421%40126/blog/static/4885513620104212950216/

http://www.cnblogs.com/hyd309/p/3549076.html

Android字符串及字符串资源的格式化的更多相关文章

  1. Android字符串资源及其格式化

    http://blog.csdn.NET/wsywl/article/details/6555959 在Android项目布局中,资源以XML文件的形式存储在res/目录下.为了更好的实现国际化及本地 ...

  2. android 时间获取以及时间格式化

    Android中获取系统时间有多种方法,可分为Java中Calendar类获取,java.util.date类实现,还有android中Time实现 现总结如下: 方法一: void getTime1 ...

  3. Android字符串,颜色,尺寸资源的使用

    字符串.颜色.尺寸资源文件这三种文件位于res文件夹的values文件夹中,名称分别为strings.xml , colors.xml , dimens.xml下面是例子,首先来看字符串资源文件str ...

  4. Android开发中的日期格式化

    下面的转换符来自Java,但是在android中同样可用.(以下表格内容来自互联网.) 常见日期格式化转换符 转换符 说 明 示 例 %te  一个月中的某一天(1-31)  2 %tb  指定语言环 ...

  5. python基础——字符串、编码、格式化

    1.三种编码:ascii Unicode utf8 2.字符串和编码数字的两个函数:ord(字符转数字ord(‘A’)=65)和 chr(数字转字符chr(65)=A) 3.bytes存储编码,记住两 ...

  6. python_字符串,元组,格式化输出

    一.字符串 1.字符串是有成对的单引号或者双引号括起来的.例如:name="张三",sex="女" 2.字符串的索引是从0开始的 3.字符串的切片 a.单个字符 ...

  7. 字符串与C51的格式化输出

    一字符数组和字符指针: 字符指针可以用字符串对其直接初始化和随时赋值:而字符数组可以用字符串进行初始化,但不能用字符串对其进行随时赋值(但此时可以定义一个字符串指针指向字符数组,然后用字符串对指针随时 ...

  8. Python 基础之字符串操作,函数及格式化format

    一.字符串的相关操作 1.字符串的拼接 + strvar1 = "我爱你,"strvar2 = "亲爱的姑凉"res = strvar1 + strvar2pr ...

  9. Android学习笔记字符串资源

    在新建好的Android项目里res目录下有个字符串资源文件 在xml文件中引用字符串资源 string.xml <resources> <string name="mot ...

随机推荐

  1. qmake -Visual Studio

    创建 Visual Studio Projiect 文件 开发者使用 Visual Studio 写Qt应用可以使用Qt商业版提供的Visual Studio integration faciliti ...

  2. Git简明使用指南[转]

    git - 简易指南 助你开始使用 git 的简易指南,木有高深内容,;). Tweet 作者:罗杰·杜德勒 感谢:@tfnico, @fhd and Namics 其他语言 english, deu ...

  3. (3)-JSONObject的过滤设置

    我们通常对一个json串和java对象进行互转时,经常会有选择性的过滤掉一些属性值.例如下面的类:   1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ...

  4. Cockroachdb 四、用户管理及授权

    四 用户管理及授权 用户管理 简介# Create a user:cockroach user set <username> <flags> # List all users: ...

  5. 如何将本地数据库迁移至SQL Azure

    Windows Azure的SQL Azure和SQL Server 拥有不同的体系结构,可以说是两个不同的产品.SQL Azure不完全支持或者尚不支持SQL Server的某些功能,这使得我们不能 ...

  6. 【Unity】Domina-Game总结与反思

    [Unity]Domina-Game总结与反思 2018/6/15 我总算是把物理课作业--Domina-Game给赶完了,这也算是我用Unity做的第一个游戏吧(不得不说我的脚本写的超烂的)...纪 ...

  7. cesium随笔 — 简单实现获取三维范围(包括相机高度)

    代码 // 获取当前三维范围 function getCurrentExtent() { // 范围对象 var extent = {}; // 得到当前三维场景 var scene = viewer ...

  8. html Canvas 画图 能够选择并能移动

    canvas 画图,能够选中所画的图片并且能够随意移动图片 <html xmlns="http://www.w3.org/1999/xhtml"> <head r ...

  9. Mysql修改字段类型

    mysql 修改字段长度 alter table news  modify column title varchar(130); alter table 表名 modify column 字段名 类型 ...

  10. zun 不能创建 docker 容器,报错: datastore for scope "global" is not initialized

    问题:zun不能创建docker容器,报错:datastore for scope "global" is not initialized   解决:修改docker 服务配置文件 ...