Android基础知识之String类使用详解
原文:http://android.eoe.cn/topic/android_sdk
字符串资源为你的应用程序提供了可以选择的文本样式和格式的文本。这里有三种类型的资源可以为你的应用程序提供字符串。
String
:XML资源提供单个的字符串
String Array
:XML资源提供字符串数组
Quantity Strings (Plurals)
:XML资源为不同数量的词或者语句携带不同的字符串。
所有的字符串都能使用一些样式标记和格式化参数。关于样式和格式的字符串的信息,请看Formatting and Styling那一部分。
String
单个的字符串可以从应用程序或者其他的资源文件(比如XML布局)中引用。
:注意:一个字符串是一个简单的资源,引用的是提供的值的名称属性(而不是XML的文件名)。 所以, 你可以将字符串资源和其他资源放在同一个XML文件元素中。
文件地址:
:res/values/filename.xml
:文件名是任意的。元素的名字将会当做资源的ID。
编译之后的资源数据类型:
:指向String的指针
资源引用
:Java:R.string.string_name
:XML:@string/string_name
语法:
<?xml version"utf-8"?>
text_string
元素:
:
:必须有,必须是根节点。
:没有属性。
:字符串,可以包含样式的标签。注意不要包含引号。更多的信息关于如何正确的风格和格式字符串Formatting and Styling请看下面。
:属性:
:name
:字符串。字符串的名字。将会作为资源的ID。
例子:
:XML文件保存在 res/values/strings.xml:
<?xml version"utf-8"?>
Hello!
:这个XML布局文件将会作为View的String。
:程序的代码使用String
String string = getString(R.string.hello);
:你既可以使用getString(int)或者getText(int)获得字符串。getText(int)将会保持富文本的样式应用到字符串。
String Array
能够被应用程序引用到的字符串数组。
:注意:一个字符串数组是一个简单的资源,引用的是提供的值的名称属性(而不是XML的文件名)。 所以, 你可以将字符串数组资源和其他资源放在同一个XML文件元素中。
文件位置:
:res/values/filename.xml
:文件名是任意的。元素的名字将会作为资源的ID。
编译之后的数据类型:
:指向字符串数组的资源指针。
引用方法
:Java:R.array.string_array_name
语法:
<?xml version"utf-8"?>
text_string
元素:
:
::必须有,而且是根节点。
::没有属性。
:
::定义一个字符串数组,包含一个或多个元素。
::属性:
::name:
:::类型是字符串,字符串的我名字。name会当做引用数组的资源ID。
::
::字符串类型,可以包含样式的标签。它的值可以使其他字符串资源的引用。必须是元素的子标签。注意不要包含省略号和引号。看Formatting and Styling,关于恰当的样式和格式你的字符串信息。
::没有属性。
例如:
:保存在res/values/strings.xml下的文件:
<?xml version"utf-8"?>
Mercury
Venus
Earth
Mars
:应用程序使用下面的方法获得字符串数组:
Resources res = getResources();
String[] planets = res.getStringArray(R.array.planets_array);
Quantity Strings (Plurals)
不同的语言有不同的规则语法协议数量。在英语中,例如,数量1是一个特例。我们写“1 book”,但对其他任何数量我们写“nbooks”。这个区别是很常见的单数和复数,但其他语言使更微妙的差别。android支持的全部集合是zero,one,two,few,many,和other。
这种情况下的规则来决定使用一个给定的语言和数量可能非常复杂,因此Android为你提供了方法如getQuantityString()来选择适当的资源。
请注意,选择是基于语法的必要性。一个字符串为零在英语将被忽略,即使数量是0,因为0不是语法不同于2,或任何其他数字除了1(“zero books”、“one book”,“two books”,等等)。不要被事实误导,比如,two个听起来像它可能只适用于数量2:一个语言可能会需要,2,12 102(等等)都像对待对方,但不同于其它的数量。实际上是依靠你的翻译了解他们的语言上的区别。
这是经常可以避免使用数量中性数量字符串剂型,如“Book:1”。这将使你的生活和你的译者的生活更简单,如果它是你的应用程序保持的风格。
:注意:一个复数的集合是可以被值得name所引用的简单资源(不是XML文件的名字)。所以你可以将复数资源和简单资源放在同一个XML文件中。放到 元素下。
文件位置:
:res/values/filename.xml
:文件名是任意的。元素的name作为资源的ID。
资源引用:
:Java: R.plurals.plural_name
语法:
<?xml version"utf-8"?>
text_string
元素:
:
::必须要有,必须是根节点。
::没有属性。
:
::字符串的集合。其中,一个字符串提供了根据数量的东西。
::包含一个或者多个元素。
:
::单个或者多个字符串。它的值可以使其他字符串资源的引用。必须是元素的子节点。不能包含省略号和引号。看下面的Formatting and Styling,关于你的字符串正确的样式和格式。
::属性:
:::quantity
::::关键字,当一个值要被使用时的指示。有效的值,大概如下所示。
<!-- 表格开始 -->
{|style="border-spacing: 0px;margin: 4px 4px; width: 90%; border-left:1px solid #ccc;border-top:1px solid #ccc; "
<!-- 这段是表头 -->
|-style="background:#DEE8F1; "
! style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px" | 值
! style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px" | 描述
<!-- 这段是表格 -->
|- style=" vertical-align:top;"
| style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
zero
| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
当某一种语言需要特殊的对待数字0(比如阿拉伯语)
<!-- 这段是表格 -->
|- style=" vertical-align:top;"
| style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
one
| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
当某种语言需要特殊的对待数字1(就像英语中的1和许多其他语言;在俄语中,所有以1结尾但是不是以11结尾就是这种情况)
<!-- 这段是表格 -->
|- style=" vertical-align:top;"
| style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
two
| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
当某种语言需要特殊的对待数字2。(比如威尔士语)
<!-- 这段是表格 -->
|- style=" vertical-align:top;"
| style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
few
| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
当某种语言需要特殊的对待数量很少的数字(比如2,3,4在捷克语中,以2,3,4但不是12,13,14结尾的波兰语中)。
<!-- 这段是表格 -->
|- style=" vertical-align:top;"
| style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
many
| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
当某种语言需要特殊的对待”大“数字(比如数字以11-99结尾在马耳他语中)。
<!-- 这段是表格 -->
|- style="vertical-align:top;"
| style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px;" |
other
| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px;" |
当某种语言不需要特殊的对待所给出的数字。
|}
<!-- 表格结束 -->
例如:
:XML文件保存在res/values/strings.xml:
<?xml version"utf-8"?>
One song found.
%d songs found.
:XML文件保存在res/values/strings.xml:
<?xml version"utf-8"?>
Znaleziono jedną piosenkę.
Znaleziono %d piosenki.
Znaleziono %d piosenek.
:Java代码:
int count = getNumberOfsongsAvailable();
Resources res = getResources();
String songsFound = res.getQuantityString(R.plurals.numberOfSongsAvailable, count, count);
:当使用getQuantityString())方法,您需要传递count两次如果字符串包含字符串格式化与一数字。例如,对于字符串% d songs found,第一个count参数选择适当的复数字符串和第二个count参数插入到% d占位符。如果你的复数字符串不包括字符串格式化,你不需要传递第三个参数给getQuantityString.)
Formatting and Styling
这里有一些重要的事情你应该知道如何正确的格式和风格字符串资源。
Escaping apostrophes and quotes
如果你有一个撇号或一个引用在你的字符串,你必须要么逃避它或附上整个字符串在其他类型的封闭引号。例如,这里有一些做和不工作:
"This'll work"
This'll also work
This doesn't work
XML encodings don't work
Formatting strings
如果您需要用String.format(String, Object...)格式化你的字符串, 然后你可以通过将你的格式字符串参数放到字符串资源中。例如,下面的资源:
Hello, %1$s! You have %2$d new messages.
在这个例子中,格式字符串有两个参数:%1$s是一个字符串和%2$d是一个十进制数。你可以格式化字符串和参数从应用程序如下:
Resources res = getResources();
String text = String.format(res.getString(R.string.welcome_messages), username, mailCount);
Styling with HTML markup
你可以将样式添加到HTML中,例如:
<?xml version"utf-8"?>
Welcome to Android!
支持的HTML元素包括:
* 表示粗体文本
* 表示斜体文本
* 表示下划线文本
有时候您可能想要创建一个样式文本资源,也被用作一个格式字符串。一般情况下,这样没用。应为String.format(String, Object...) 方法将会从字符串中擦出所有的格式信息。解决方法是编写HTML标签包含转义的实体,然后恢复与fromHtml(String),在格式化发生。例如:
1.以非HTML的字符串保存你的带有样式的文本资源:
Hello, %1$s! You have %2$d new messages.
:在这个格式化的字符串中,有一个b元素。注意括号是非HTML的。使用<符号
2.所以照例格式化文本,但是也使用fromHtml(String))转换HTML文本为样式文本。:
Resources res = getResources();
String text = String.format(res.getString(R.string.welcome_messages), username, mailCount);
CharSequence styledText = Html.fromHtml(text);
因为fromHtml(String))方法将格式所有HTML实体,你使用格式化的文本一定要避免任何可能的HTML字符字符串,用htmlEncode(String))。例如,如果您将传递一个字符串参数给to String.format())可以包含字符,例如" < "或" & ",然后他们必须先转义格式化,这样当格式化的字符串是通过fromHtml(string)),该字符写出来是他们最初的样子。例如:
String escapedUsername = TextUtil.htmlEncode(username);
Resources res = getResources();
String text = String.format(res.getString(R.string.welcome_messages), escapedUsername, mailCount);
CharSequence styledText = Html.fromHtml(text);
Android基础知识之String类使用详解的更多相关文章
- c++中string类的详解
,<时返回-1,==时返回0 string的子串:string substr(int pos = 0,int n = npos) const;//返回pos开始的n个字符组成的字符串strin ...
- JAVA中的String类(详解)
Java.lang.String类是final类型的,因此不可以继承这个类.不能修改这个类.String是一个类不属于基本数据类型. 可以从源码中看到,String是一个final类型. String ...
- Android基础内容提供者ContentProvider的使用详解(转)
1.什么是ContentProvider 首先,ContentProvider(内容提供者)是android中的四大组件之一,但是在一般的开发中,可能使用的比较少. ContentProvider为不 ...
- 《Java基础知识》Java this关键字详解
this 关键字用来表示当前对象本身,或当前类的一个实例,通过this可以调用对象的所有方法和属性. 例如: public class Demo { private int x = 10; priva ...
- 《Java基础知识》Java IO流详解
Java IO概念 1. 用于设备之间的数据传输. 2. Java 将操作数据流的功能封装到了IO包中. 3. 数据流流向分:输入流和输出流,操作对象为文件. 4. 流按照操作数据分:字节流(通用)和 ...
- 《Java基础知识》序列化与反序列化详解
序列化的作用:为了不同jvm之间共享实例对象的一种解决方案.由java提供此机制. 序列化应用场景: 1. 分布式传递对象. 2. 网络传递对象. 3. tomcat关闭以后会把session对象序列 ...
- 【Xamarin开发 Android 系列 4】 Android 基础知识
原文:[Xamarin开发 Android 系列 4] Android 基础知识 什么是Android? Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Li ...
- 《手把手教你》系列基础篇(九十七)-java+ selenium自动化测试-框架设计篇-Selenium方法的二次封装和页面基类(详解教程)
1.简介 上一篇宏哥介绍了如何设计支持不同浏览器测试,宏哥的方法就是通过来切换配置文件设置的浏览器名称的值,来确定启动什么浏览器进行脚本测试.宏哥将这个叫做浏览器引擎类.这个类负责获取浏览器类型和启动 ...
- Android中Application类的详解:
Android中Application类的详解: 我们在平时的开发中,有时候可能会须要一些全局数据.来让应用中的全部Activity和View都能訪问到.大家在遇到这样的情况时,可能首先会想到自定义一 ...
随机推荐
- 【Thinking in Java】读书笔记
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6480258.html 第三章:操作符 1:基本数据类型的比较用 ==.!=,引用类型的==.!=是针对地址的比 ...
- E437: terminal capability "cm" required 错误出现的原因和解决方法
E437: terminal capability "cm" required 错误: 出现这个问题原因是没有配置export TERM=xterm 执行:export TERM= ...
- Linux下通用打印系统CUPS使用教程
昨天研究了一下关于在Linux下实现打印操作的相关内容,整理记录如下: 1.什么是CUPS CUPS(Common UNIX Printing System,即通用Unix打印系统)是FedoraCo ...
- oracle批量更新之使用游标进行分批次更新的5种方式及速度比对
1.情景展示 一共有22w条数据, 需要将A表的主键更新至B表的指定字段,如何快速完成更新? 2.解决方案 声明: 解决方案不只一种,该文章只介绍快速游标法及代码实现: 两张表的ID和ID_CAR ...
- 【DB2】设置表不记录日志,但是回滚导致表不可用报错:DB2 SQL Error: SQLCODE=-1477, SQLSTATE=55019, SQLERRMC=LEN.TMP;5;3, DRIVER=3.57.82
今天在生产发现个问题,很多表报错:SQLCODE=-1477 后来线下模拟出这种场景 出现这个问题,此时对表做reorg.runstats都是无效的. 那么怎么来解决这个问题呢? 只能重建表解决问题
- 使用maven创建web项目【转】
1.首先新建一个maven项目,看图: 2.按照以上步骤就可以创建一个maven项目,可以看到最下图的目录结构,但是这样的目录结构是不对的,需要做一些修改. 首先为了避免乱码,我们应该将项目编码换成U ...
- Jmeter-maven-plugin高级配置之选择测试脚本(转)
Posted on 2014 年 6 月 6 日 在pom.xml文件中可以指定运行哪些jmx脚本. 运行所有的测试脚本 Jmeter默认运行${project.base.directory}/src ...
- HTML5 Audio标签方法和函数API介绍
问说网 > 文章教程 > 网页制作 > HTML5 Audio标签方法和函数API介绍 Audio APIHTML5HTML5 Audio预加载 HTML5 Audio标签方法和函数 ...
- spring事务——try{...}catch{...}中事务不回滚的几种处理方式
当希望在某个方法中添加事务时,我们常常在方法头上添加@Transactional注解 @ResponseBody @RequestMapping(value = "/payment" ...
- 总结一下关于mysql 5.6 新特性
一直断断续续的看一些mysql特性,今天总结一下,以下是列表,网址 http://mariadb.org/ (也是类似的特性), http://mysql.com/ 最近在看关于mysql新特性的一些 ...