在Android开发中,我们的字符串一般都是统一写在项目的res/values/strings.xml中,如果我们需要得到指定的字符串,一般使用getString方法来得到。
其实getString特别的有用,而且用法也很灵活,下面我们就来说说这个方法。
一、getString的常见用法 
 在Resources类中它有两种定义形式:
public String getString(int id)public String getString(int id, Object... formatArgs)第一个比较简单,直接通过getString就可以得到指定id的字符串,第二个使用到了占位符,就是可以给前面的字符串的占位符中动态的填充指定的值,所以用法比较灵活,我们重点来说第二种。
1、整型填充符%n$md 
 代表输出的是整数,n代表是第几个参数,m为数据的位数,如果数据位数不够,在输出之前放置空格,也可以设为0m,在输出之前放置m个0 
2、字符串填充%n$ms 
 代表输出的是字符串,n代表是第几个参数,m为数据的位数,如果数据位数不够,在输出之前放置空格。
3、浮点数填充%n$mf 
 代表输出的是浮点数,n代表是第几个参数,设置m的值可以控制小数位数,如m=2.2时,输出格式为00.00 
也可简单写成: 
 %d (表示整数) 
 %f (表示浮点数) 
 %s (表示字符串) 
下面有个小例子: 
 string.xml
<string name="test1">当前进度为:%1$05d</string>
<string name="test2">当前已经发现 %1$d %2$s</string>
<string name="test3">当前数字为 %1$3.4f </string>MainActivity文件
package com.xxx.cn.getstringtest;import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;public class MainActivity extends Activity {private TextView mTestText1;private TextView mTestText2;private TextView mTestText3;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mTestText1 = (TextView) findViewById(R.id.test1);mTestText2 = (TextView) findViewById(R.id.test2);mTestText3 = (TextView) findViewById(R.id.test3);mTestText1.setText(getString(R.string.test1, 55));mTestText2.setText(getString(R.string.test2, 55, "项"));mTestText3.setText(getString(R.string.test3, 87.44));}
}布局文件就是几个TextView的垂直布局。
使用上面这些用法我们就可以动态的去向字符串中添加指定的内容。
二、与Html.fromHtml结合使用 
 getString与Html结合使用可以实现更加好的效果。
我们在上面的字符串如果想要设置部分字体的颜色或者字体什么的,我们就可以使用Html标签了,但是这些标签都需要使用转义字符。
转义字符表可看这篇文章:HTML转义字符大全
假如我们需要这个效果: 
 当前进度为55
那么string应该写成下面形式,要将html标签都转成转义字符
<string name="test4">当前进度为<font color=\"red\">%1$d</font></string>mTestText4.setText(Html.fromHtml(getString(R.string.test4, 55)));最终的运行效果为: 
 
最后,我们来看看getString函数的源码:
public String getString(int id, Object... formatArgs) throws NotFoundException {String raw = getString(id);return String.format(mConfiguration.locale, raw, formatArgs);
}从上面的代码我们就很容易看出,原理它使用的就是String.format进行格式化,具体String.format的详细用法可以参照下面这篇文章 
 String.format详解
















