Android通过String.format格式化(动态改变)字符串资源的显示内容

一、实现效果:

最近在项目中需要做类似于上图显示的效果,里面的数字和称谓是动态获取的,对于这种显示效果,有如下两种解决方案来处理:

(1)通过代码动态设置TextView的内容,比如:

/**
	 * 显示今日状态
	 *
	 * */
	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 );
	}

然后调用该方法:

showTodayState( 1234567, 68.376f, "爆头大师", 'B' );

(2)在string.xml文件中定义一个字符串,然后在代码中通过String.format方法来格式化该字符串,比如:

<string name="today_state_string">您正与%1$d位朋友在一起游戏,本周排名提升了%2$.3f,获得%3$s的称号,等级为%4$c!</string>

在代码中做如下定义:

/**
	 * 显示今日状态
	 *
	 * */
	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 );
	}

本文介绍第二种处理方式,因为显然第二种处理方式更方便,特别是需要动态改变多个显示状态的时候。

二、字符串资源格式化详细介绍:

<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方法里面的参数不少于字符串资源中定义的格式化参数个数(实践证明多了参数是不会报异常的),比如在上面的例子中字符串有四个格式化参数,如果代码写成这样:

showTodayState( int totalUser, float upRate, String hornor )//少了level参数

则会报如下异常:

四、参考资料:

1、修改Android中strings.xml文件, 动态改变数据

2、android String 资源 你所不知道的

时间: 2024-12-20 11:45:03

Android通过String.format格式化(动态改变)字符串资源的显示内容的相关文章

C# String.Format格式化json字符串中包含"{" "}"报错问题

json.Append(String.Format("{\"total\":{0},\"row\":{1}}", lineCount, strJSON));直接会报错 字符串中包含{或者},则需要用{{ 来代替字符 {,用}} 代替 }如:json.Append(String.Format("{{\"total\":{0},\"row\":{1}}}", lineCount, strJS

javascript生成表格增删改查 JavaScript动态改变表格单元格内容 动态生成表格 JS获取表格任意单元格 javascript如何动态删除表格某一行

jsp页面表格布局Html代码 <body > <center> <input type="text" value="111" id="mytext"> <table border="1" width="60%" id="mytable"> <tr> <td id="td1">第一行第一列<

我的Android进阶之旅------&gt;Java字符串格式化方法String.format()格式化float型时小数点变成逗号问题

今天接到一个波兰的客户说有个APP在英文状态下一切运行正常,但是当系统语言切换到波兰语言的时候,程序奔溃了.好吧,又是我来维护. 好吧,先把系统语言切换到波兰语,切换到波兰语的方法查看文章 我的Android进阶之旅------>Android[设置]-[语言和输入法]-[语言]列表中找到相应语言所对应的列表项 地址:http://blog.csdn.net/ouyang_peng/article/details/50209789 ================================

修改Android中strings.xml文件, 动态改变数据

有些朋友可能会动态的修改Android中strings.xml文件中的值,在这里给大家推荐一种简单的方法.strings.xml中节点是支持占位符的,如下所示: <string name="data">整数型:%1$d,浮点型:%2$.2f,字符串:%3$s</string> 其中%后面是占位符的位置,从1开始, $ 后面是填充数据的类型         %d:表示整数型:         %f :表示浮点型,其中f前面的.2 表示小数的位数         %

string.format格式化字符串中转义大括号“{}”

用C#写程序操作Excel,读取单元格内容根据所需格式生成字符串,使用String.Format(string format,object arg0)方法.以前只知"{0}"为索引占位符(即格式项),与参数列表中的第一个对象相对应,格式设置过程将每个格式项替换为对应对象的值的文本表示形式.但这次需将参数对象格式成一对大括号括起来的格式,即返回字符串"{对象arg0的文本表示形式}". //直接加大括号 String.Format("{{0}}",

string.Format格式化用法详解

1.格式化货币(跟系统的环境有关,中文系统默认格式化人民币,英文系统格式化美元) string.Format("{0:C}",0.2) 结果为:¥0.20 (英文操作系统结果:$0.20) 默认格式化小数点后面保留两位小数,如果需要保留一位或者更多,可以指定位数 string.Format("{0:C1}",23.15) 结果为:¥23.2 (截取会自动四舍五入) 格式化多个Object实例 string.Format("市场价:{0:C},优惠价{1:C

string.Format 格式化时间,货币

1.格式化货币(跟系统的环境有关,中文系统默认格式化人民币,英文系统格式化美元) string.Format("{0:C}",0.2) 结果为:¥0.20 (英文操作系统结果:$0.20) 默认格式化小数点后面保留两位小数,如果需要保留一位或者更多,可以指定位数string.Format("{0:C1}",23.15) 结果为:¥23.2 (截取会自动四舍五入) 格式化多个Object实例string.Format("市场价:{0:C},优惠价{1:C}&

string.Format 格式化日期格式

DateTime dt = DateTime.Now;//2010年10月4日 17点05分            string str = "";            //str = string.Format("{0:y yy yyy yyyy}", dt); //10 10 2010 2010            //str = String.Format("{0:M MM MMM MMMM}", dt); //10 10 十月 十月 

string.Format 格式化输出日期

string.Format("{0:d}",System.DateTime.Now) 结果为:2009-3-20 (月份位置不是03) string.Format("{0:D}",System.DateTime.Now) 结果为:2009年3月20日 string.Format("{0:f}",System.DateTime.Now) 结果为:2009年3月20日 15:37 string.Format("{0:F}",Sys