Android String 值动态替换

今天在项目中看到同事在 values-strings 中定义了一个

<string name="v_seconds">(%1$s秒)</string>

觉得有点奇怪,在代码中看到引用它是显示倒计时秒数的。

不明觉厉。

于是上网查了一下资料,了解了 %n$ms %n$md %n$mf 的用法。

先上结论:

  • %n$ms:代表输出的是字符串,n代表是第几个参数,设置m的值可以在输出之前放置空格
  • %n$md:代表输出的是整数,n代表是第几个参数,设置m的值可以在输出之前放置空格
  • %n$mf:替换的是浮点数,n是第几个参数,m在浮点类型之前设置几个空格 比如m=20.2表示在浮点类型之前设置20个空格,浮点类型保留2位小数

这种写法,非常适用于一些需要动态替换数据进行显示的功能。

然后看一下代码:

1. 先在 values-strings 中定义好要进行替换的值
<string name="person">我叫%1$s,现在生活在%2$2s</string>
<string name="count">我今天吃了%1$4d个苹果</string>
<string name="money">我今天花了%1$15.2f元</string>

我定义了三个 string 值,三种类型都演示到。

首先,person 是字符串类型值输出,有两个值要进行替换,分别用 %1%2 进行参数标注。并且,参数2的值前有两个空格。

count 是整数型输出,替换一个值,前面有4个空格。

money 是浮点型输出,替换一个值,前面有四个空格,并且值保留两位小数。

2. 代码中引用

先定义三个 Textview:

private TextView mTvString;
private TextView mTvNum;
private TextView mTvFloat;

再给 Textview 赋值:

mTvString = (TextView) findViewById(R.id.tv_String);
mTvString.setText(String.format(getString(R.string.person), "蔫巴登", "沈阳"));

mTvNum = (TextView) findViewById(R.id.tv_num);
mTvNum.setText(String.format(getString(R.string.count), 3));

mTvFloat = (TextView) findViewById(R.id.tv_float);
mTvFloat.setText(String.format(getString(R.string.money), 195.1255));

OK了,这样就已经好了。

看一下结果:
ss

参考:

android中string.xml中%1s、%1d等的用法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值