Android中%s %d %1$s %1$d %f以及空格占位符的使用

一、引言

我们在开发中经常会遇到这样的场景,就是给一个TextView设置内容时,有一部分是Android端写死的提示,有一部分是从后台服务器端获取的数据进行展示。 我们要将这几部分内容拼接在一起显示在一个TextView控件中。

按照我之前的想发和思路有两种解决办法:

①有几部分内容就使用几个TextView控件。

②使用(+)连接符或者是StringBuilder、StringBuffer将这些内容拼接在一起再显示到一个控件中。

那么接下来我谈下这两种解决方法的弊端所在:首先第一种我们会在xml文件中写好多个TextView,还要注意对齐方式啊。更重要的是假如这里的变量内容有二三十个呢?那岂不是得写到手抽筋。。。第二种拼接方式我觉得如果使用+号的话,我们的代码里会看到好多的硬代码,修改起来也不方便,影响整体的代码整洁性。如果使用StringBuilder、StringBuffer的拼接的话,我们还要创建好多个这样的对象。所以也不是很好的选择。那么有没有一种办法能够相对很完美的解决呢,这个时候就需要占位符闪亮登场了。

二、了解常用的占位符

%s:表示字符串类型的占位符

%d:表示整型占位符

%f:表示浮点型占位符 如果需保留小数点后两位:%.2f

%n$s:这样写也表示字符串的占位符,只不过这样写会更加的具体些(指定了索引位置),意思就是具体的第几个参数需要动态变化写内容。结合String.format()方法,它可以很给力的计算出你的string.xml中有多少个占位符,就让你可以填充多少个参数。(建议使用第二种)

     这里的 n  代表第n个参数,如%2代表的是第2个参数;$是结束符;

空格占位符:

&#32:普通的英文半角空格

  ==   ==   == no-break space (普通的英文半角空格但不换行)

  == 中文全角空格 (一个中文宽度)

  ==   == en空格 (半个中文宽度)

  ==   == em空格 (一个中文宽度)

  == 四分之一em空格 (四分之一中文宽度)

相比平时的空格( ),nbsp拥有不间断(non-breaking)特性。即连续的nbsp会在同一行内显示。即使有100个连续的nbsp,浏览器也不会把它们拆成两行。

&#160 这样的空格,用String的 trim();方法是去不掉的! 因为 &#160 这些东西 trim();不当他们是空格!

三、举例使用

1.layout布局文件引用

<TextView
    android:id="@+id/tv_oil_station_integral_discount"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="120dp"
    android:layout_marginRight="12dp"
    android:layout_toLeftOf="@+id/cb_oil_station_integral"
    android:textColor="@color/color_333333"
    android:textSize="@dimen/text_15"
    tools:text="@string/text_yuan" />

 2.string.xml文件

<string name="text_yuan">-%1$d元</string>

3.Activity

 TextView mTvHjyIntegralDiscount = findViewById(R.id.tv_hjy_integral_discount);
mTvHjyIntegralDiscount.setText(String.format(getResources().getString(R.string.text_yuan),integralDiscountBean.hjy_credit.deduction_money));   //-10元

如果是字符型:

<string name="my_info">我叫%1$s,%2$s6,不信可以%3$s一起玩!</string>
 String s = String.format(getResources().getString(R.string.my_info), "梁超杰", "王者荣耀","明天");
 textView.setText(s);

空格占位符的使用:

<string name="tv_item_order_number">订单编号:&#160;&#160;&#160;%1$s</string>
<string name="oil_card_explain_desc">&#8195;&#8195;代办加油卡为有效期6年的江苏个人记名卡,卡内没有余额。\n&#8195;&#8195;代理办卡时中石化会给客户发一条预约成功的短信,请客户务必填写与办卡姓名一致的手机号码(17或者14开头的虚拟号段无法预约办理)。</string>

使用的时候直接在xml文件中使用就行了

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="7dp"
    android:letterSpacing="0.05"
    android:lineSpacingMultiplier="1.2"
    android:text="@string/oil_card_explain_desc"
    android:textColor="@color/color_666666"
    android:textSize="@dimen/text_13"/>

 

猜你喜欢

转载自blog.csdn.net/qq_37982823/article/details/84871069