Android通过String.format格式化(动态改变)字符串资源的显示内容
扫描二维码
随时随地手机看文章
一、实现效果:
最近在项目中需要做类似于上图显示的效果,里面的数字和称谓是动态获取的,对于这种显示效果,有如下两种解决方案来处理:
(1)通过代码动态设置TextView的内容,比如:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
/** * 显示今日状态 * * */ private void showTodayState( int totalUser, float upRate, String hornor, char level ){ StringBuilder todayStateStr = new StringBuilder( ); todayStateStr.append( 您正与 ); todayStateStr.append( totalUser ); todayStateStr.append( 位朋友在一起游戏,本周排名提升了 ); todayStateStr.append( upRate ); todayStateStr.append( ,获得 ); todayStateStr.append( hornor ); todayStateStr.append( 的称号,等级为 ); todayStateStr.append( level ); todayStateStr.append( ! ); mTodayStateTxt.setText( todayStateStr ); } |
然后调用该方法:
1
|
showTodayState( 1234567 , 68 .376f, 爆头大师, ‘B‘ ); |
(2)在string.xml文件中定义一个字符串,然后在代码中通过String.format方法来格式化该字符串,比如:
1
|
<string name= "today_state_string" >您正与% 1 $d位朋友在一起游戏,本周排名提升了% 2 $.3f,获得% 3 $s的称号,等级为% 4 $c!</string> |
在代码中做如下定义:
1
2
3
4
5
6
7
8
|
/** * 显示今日状态 * * */ private void showTodayState( int totalUser, float upRate, String hornor, char level ){ String todayStateStr = String.format( getResources( ).getString( R.string.today_state_string), totalUser, upRate, hornor, level ); mTodayStateTxt.setText( todayStateStr ); } |
本文介绍第二种处理方式,因为显然第二种处理方式更方便,特别是需要动态改变多个显示状态的时候。
二、字符串资源格式化详细介绍:
1
|
<string name= "today_state_string" >您正与% 1 $d位朋友在一起游戏,本周排名提升了% 2 $.3f,获得% 3 $s的称号,等级为% 4 $c!</string> |
从上面这行字符串的定义可以看出,格式化字符串资源的格式为:
%+参数位置+$+格式化类型,其中:
参 数 位 置:从1开始依次编号,String.forma方法的第二个参数为格式化的第一个参数,后面依次递增;
格式化类型:
s 字符串
f 浮点数
d 整型数
c 字符类型
其实懂点C语言的朋友一看就知道和printf的打印输出格式化差不多。
三、注意事项:
1、在string.xml文件中定义好格式化的字符串资源,通过代码动态设置字符串内容时,必须确保String.format方法里面的参数不少于字符串资源中定义的格式化参数个数(实践证明多了参数是不会报异常的),比如在上面的例子中字符串有四个格式化参数,如果代码写成这样:
1
|
showTodayState( int totalUser, float upRate, String hornor ) //少了level参数 |
则会报如下异常: