<string name="xxx"> 的复杂用法:格式化及使用html标签

1.官方文档:

  https://developer.android.com/guide/topics/resources/string-resource

2.格式化字符串

2.1 示例

<resources>
    <string name="app_name">DataBind</string>
    <string name="format">format : name=%1$s,age=%2$1d,value=%3$32f </string>
    <string name="int_format1">111 ->  \%%#-8X value = %1$#-8X </string>
    <string name="int_format2">111 ->  \%%d value = %1$d </string>
    <string name="int_format3">111 ->  \%%o value = %1$o </string>
    <string name="int_format4">111 ->  \%%u 不支持 </string>

    <string name="float_format1">11.777777f   ->    \%%3f value = %1$3f </string>
    <string name="float_format2">11.777777f   ->    \%%f value = %1$f </string>
    <string name="float_format3">11.777777f   ->    \%%#e value = %1$#E </string><!--#无效-->
    <string name="float_format4">11.777777f   ->    \%%g value = %1$G </string>

    <string name="char_format1">  \%%-5c\'A\'   ->    \%%5c value = %1$-5c </string>
    <string name="char_format2">\"world\"   ->    \%%s value = %1$s </string>

</resources>

结果如下:

2.2 语法格式

  [ %   +   第几个参数(从1开始) +       # (显示   +  空格补齐位数(小于实参则忽略,正数左补,负数右补)    +     格式字符 ]

  如: %1$#-8X    其中:

  • 1  表示第1个参数
  • #  显示进制符号
  • -8 右边补齐空格至8位(不足8位则补空格,实参位数大于8则不补)    
  • X  表示16进制数

2.3 支持的格式化符号

格式字符 描述
d 以十进制形式输出带符号整数(正数不输出符号)
o 以八进制形式输出无符号整数(不输出前缀0)
x,X 以十六进制形式输出无符号整数(不输出前缀Ox)
f 以小数形式输出单、双精度实数
e,E 以指数形式输出单、双精度实数
g,G 以%f或%e中较短的输出宽度输出单、双精度实数
c 输出单个字符
s 输出字符串

  格式符号 u  表示以十进制形式输出无符号整数. 目前不支持

2.4 使用

  • 在代码中
        var text = getString(R.string.format, "李4",23,333.333333f)
  • 在数据绑定中使用
        <TextView
            android:id="@+id/tvFormat"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="24dp"
            android:text='@{@string/format("李4",0x20,33.333333f),default=@string/format}'
            app:layout_constraintStart_toStartOf="@+id/feature_edt"
            app:layout_constraintTop_toBottomOf="@+id/features_txt1" />

3. 使用 HTML 标记设置样式

3.1 示例

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="welcome">Welcome to <b>Android</b>!</string>
</resources>

3.2 支持以下 HTML 元素

  • 粗体:<b>、<em>
  • 斜体:<i>、<cite>、<dfn>
  • 文本放大 25%:<big>
  • 文本缩小 20%:<small>
  • 设置字体属性:<font face=”font_family“ color=”hex_color”>。可能的字体系列示例包括 monospaceserif 和 sans_serif
  • 设置等宽字体系列:<tt>
  • 删除线:<s>、<strike>、<del>
  • 下划线:<u>
  • 上标:<sup>
  • 下标:<sub>
  • 列表标记:<ul>、<li>
  • 换行符:<br>
  • 区隔标记:<div>
  • CSS 样式:<span style=”color|background_color|text-decoration”>
  • 段落:<p dir=”rtl | ltr” style=”…”>

3.3 用法

  源串(下例中的username,mailCount)中没有html字符

    val text: String = getString(R.string.welcome_messages, username, mailCount)
    val styledText: Spanned = Html.fromHtml(text, FROM_HTML_MODE_LEGACY)

  如果上面代码中的username中含有html字符,要先html编码它。

    val escapedUsername: String = TextUtils.htmlEncode(username)
    val text: String = getString(R.string.welcome_messages, escapedUsername, mailCount)
    val styledText: Spanned = Html.fromHtml(text, FROM_HTML_MODE_LEGACY)

 

 

posted @ 2015-10-02 10:32  f9q  阅读(2803)  评论(0编辑  收藏  举报