在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;
@Override
protected 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详解