先看以下这个案例,然后在分析:
string.xml 使用xliff,需要导入命名空间 xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_name">UI_All</string> <!-- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 以下是浮点型系列 -/> <!- 显示浮点类型 %n$mf m=1.2小数点后面有两位 --> <string name="cost_money" msgid="7137320847812992243">花费<xliff:g id="number">%1$1.2f</xliff:g>块</string> <!-- 显示浮点类型 %n$mf m=1.3小数点后面有三位--> <string name="cost_money_2">您消费了<xliff:g id="number2">%1$1.3f</xliff:g>元</string> <!-- 显示浮点类型 %n$mf m=1.9小数点后面有九位--> <string name="cost_money_3">您支付了<xliff:g id="number3">%1$1.9f</xliff:g>元钱</string> <!-- 显示浮点类型 %n$mf m=9.5小数点后面有五位 9.5的9理解位空格 --> <string name="cost_money_4">您扣除了<xliff:g id="number4">%1$9.5f</xliff:g>元钱</string> <!-- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 以下是整型系列 --> <string name="count">这个办公室有<xliff:g id="count">%1$d</xliff:g>个工程师</string> <string name="count2">这个办公室有<xliff:g id="count2">%1$9d</xliff:g>个工程师</string> <!-- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 以下是字符串型系列 --> <string name="string">请求网络读取交易信息异常,详情是<xliff:g id="string">%1$s</xliff:g>行号890行</string> <string name="string2">此书名是<xliff:g id="string2">%1$9s</xliff:g>设计模式书籍</string> <!-- 多个xliff 由于多个xliff 和 显示类型无关,以下就随意以浮点型 示例 --> <string name="total_points">\t第一名<xliff:g id="t1">%1$1.2f</xliff:g>分\n\t第二名<xliff:g id="t2">%2$1.2f</xliff:g>分</string> <string name="welcome"> 欢迎 <xliff:g id="name">%1$s</xliff:g>, 排名 <xliff:g id="num">%2$d</xliff:g> </string> </resources>
activity_stirng.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="20dp"> <!-- 以下是整数系列>>>>>>>>>>>>>>>>>> --> <!-- 浮点型,小数点后面三位 --> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/cost_money" /> <TextView android:id="@+id/tv_info1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:text="浮点型,小数点后面两位" /> <TextView android:id="@+id/tv_info2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:text="浮点型,小数点后面三位" /> <TextView android:id="@+id/tv_info3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:text="浮点型,小数点后面九位" /> <TextView android:id="@+id/tv_info4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:text="浮点型,小数点后面五位,有空格 m=9.5 9代表空格" /> <!-- 以下是整数系列>>>>>>>>>>>>>>>>>> --> <TextView android:id="@+id/tv_info5" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="整数" android:layout_marginTop="40dp" /> <TextView android:id="@+id/tv_info6" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="整数有空格" android:layout_marginTop="20dp" /> <!-- 以下是字符串系列>>>>>>>>>>>>>>>>>> --> <TextView android:id="@+id/tv_info7" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:text="字符串" /> <TextView android:id="@+id/tv_info8" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:text="字符串 有空格" /> <!-- 以下是多个xliff --> <TextView android:id="@+id/tv_info9" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="40dp" android:text="以下是多个xliff" /> <TextView android:id="@+id/tv_info10" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:text="以下是多个xliff 欢迎" /> </LinearLayout>
Activity
package liudeli.ui.all; import android.annotation.SuppressLint; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; public class StringActivity extends Activity { private TextView tv_info1, tv_info2, tv_info3, tv_info4, tv_info5, tv_info6, tv_info7, tv_info8, tv_info9, tv_info10; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_string); tv_info1 = findViewById(R.id.tv_info1); tv_info2 = findViewById(R.id.tv_info2); tv_info3 = findViewById(R.id.tv_info3); tv_info4 = findViewById(R.id.tv_info4); tv_info5 = findViewById(R.id.tv_info5); tv_info6 = findViewById(R.id.tv_info6); tv_info7 = findViewById(R.id.tv_info7); tv_info8 = findViewById(R.id.tv_info8); tv_info9 = findViewById(R.id.tv_info9); tv_info10 = findViewById(R.id.tv_info10); initStringData(); } @SuppressLint("StringFormatMatches") protected void initStringData() { String cost1 = getString(R.string.cost_money, 5.5); tv_info1.setText(cost1); String cost2 = getString(R.string.cost_money_2, 22.99); tv_info2.setText(cost2); String cost3 = getString(R.string.cost_money_3, 88.77); tv_info3.setText(cost3); String cost4 = getString(R.string.cost_money_4, 88.77); tv_info4.setText(cost4); String cost5 = getString(R.string.count, 200); tv_info5.setText(cost5); String cost6 = getString(R.string.count2, 600); tv_info6.setText(cost6); String cost7 = getString(R.string.string, "严重的内存溢出(原因-图片申请控件过大"); tv_info7.setText(cost7); String cost8 = getString(R.string.string2, "大话"); tv_info8.setText(cost8); String cost9 = getString(R.string.total_points, 539.81, 695.99); tv_info9.setText(cost9); String s = getString(R.string.welcome, "abc", 123); tv_info10.setText(s); } }
效果:
分析:
%n$md:输出的是整数,n代表是第几个参数,设置m的值可以在输出之前放置空格,也可以设为0m,在输出之前放置m个0
以下代码会报错❌,因为整数这种方式,m不能等于 9.9 不能是浮点型,可以是9
<string name="count2">这个办公室有<xliff:g id="count2">%1$9.9d</xliff:g>个工程师</string>
以下代码是正确的✅
<string name="count2">这个办公室有<xliff:g id="count2">%1$9d</xliff:g>个工程师</string>
%n$mf:输出的是浮点数,n代表是第几个参数,设置m的值可以在输出之前放置空格,设置m的值可以控制小数位数,如m=2.2时,输出格式为00.00
以下代码是正确的✅
<string name="cost_money_4">您扣除了<xliff:g id="number4">%1$9.5f</xliff:g>元钱</string>
以下代码是错误的❌,设置后,无空格效果,m必须是浮点型,整型无效果
<string name="cost_money_4">您扣除了<xliff:g id="number4">%1$9f</xliff:g>元钱</string>
%n$ms:输出的是字符串,n代表是第几个参数,设置m的值可以在输出之前放置空格
以下代码是没有空格:%1$s
<string name="string2">此书名是<xliff:g id="string2">%1$s</xliff:g>设计模式书籍</string>
以下代码是有空格的:%1$9s
<string name="string2">此书名是<xliff:g id="string2">%1$9s</xliff:g>设计模式书籍</string>
以下代码是有空格的:%1$9.9s 效果和 %1$9s 是一样的空格量
<string name="string2">此书名是<xliff:g id="string2">%1$9.9s</xliff:g>设计模式书籍</string>