Resources中getString方法解析

在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">当前进度为&lt;font color=\"red\"&gt;%1$d&lt;/font&gt;</string>


mTestText4.setText(Html.fromHtml(getString(R.string.test4, 55)));

最终的运行效果为:
Resources中getString方法解析_第1张图片

最后,我们来看看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详解

你可能感兴趣的:(android,getString)