Android中的值文件

Author Avatar
罗炜光 7月 21, 2016
  • 在其它设备中阅读本文章

值文件标签汇总

  • string
  • string-array
  • bool
  • integer
  • integer-array
  • dimen
  • declare-styleable
  • eat-comment
  • attr
  • color
  • style
  • item
  • plurals
  • array
  • fraction
  • drawable

string

字符串是最常见的资源文件,例如:

<string name="hello">Hello World</string>

如果该字符串资源不必本地化,这设置起translatable="false",例如:

<string name="hello" translatable="false">Hello World</string>

string的特殊字符问题

字符之间的空格用 Space 键是能显示出效果的的,但是字符后面如果需要添加空格,直接 Space 键是不管用的,此时 空格应该用  来表示

"     (&#34; 或 &quot;) 
'     (&#39; 或 &apos;) 
&     (&#38; 或 &amp;) 
lt(<) (&#60; 或 &lt;) 
gt(>) (&#62; 或 &gt;)

输入"应该是\"或者\&quot;
输入'应该是\'或者\&apos;

实际值 转译字符
\”
\’
@ \@

字符串资源的引用

  • xml中引用自定义字符串资源 @string/...
  • java中引用自定义字符串资源R.string.***
  • xml中引用框架层的字符串资源@android:string/...
  • java中引用框架层的字符串资源android.R.string.***

String通配符

格式为%n$s表示字符串,其中n表示第n个要替换的数
%n$d表示整数,%n$f表示浮点数

例如:

  1. string定义

    <string name="wildcard_character" >%1$s今年%2$d岁的概率为%3$f</string>
    
  2. 代码中设置

    String values = getResources().getString(R.string.wildcard_character,"小明", 22,99.99);
    tvStringActivityWildcardCharacter.setText(values);
    
  3. 显示效果

    小明今年23岁的概率为99.990000
    

使用html标签

例如实现下划线可以用html的<u></u>标签

  1. xml中设置
    <string name="underline">这是<u>下划线</u></string>
    
  2. 代码中设置
    tvStringActivityUnderline.setText(Html.fromHtml("代码设置" + "<u>"+ "下划线" + "</u>"));
    

string-array

  1. xml中设置

    <string-array name="string_array">
     <item >"妙蛙种子"</item>
     <item >"小火龙"</item>
     <item >"杰尼龟"</item>
    </string-array>
    
  2. 代码中使用

    Resources res = getResources();
    String[] array = res.getStringArray(R.array.string_array);
    

integer-array

    <integer-array name="integer_array">
        <item>10</item>
        <item>20</item>
        <item>30</item>
    </integer-array>

代码中使用:

Resources res = getResources();
int[] array = res.getIntArray(R.array.integer_array);

dimen

<dimen name="demen1">18.2dp</dimen>

获取值的三种方法,以下三种返回的都是转换为px单位的数字

  • 返回”四舍五入”的int值

    getResources().getDimensionPixelSize(R.dimen.demen1);
    
  • 返回舍去小数点后的int值.

    getResources().getDimensionPixelOffset(R.dimen.demen1);
    
  • 返回浮点数

    getResources().getDimension(R.dimen.demen1);
    

declare-styleable,eat-comment,attr

<eat-comment/>去除标签

<declare-styleable name="declare_styleable"></declare-styleable>表示一个属性组

<attr/>表示具体属性,其中format表示属性类型
属性类型包括:

说明
boolean 布尔类型
color 颜色
dimension 尺寸
enum 枚举
flag
float 浮点型
fraction 百分比
integer 整形
reference 引用
string 字符串

其中属性可以通过|表示多条属性。

例子

<!-- =============================================================== -->
<!--                         去除掉注释                                -->
<!-- =============================================================== -->
<eat-comment/>

<declare-styleable name="declare_styleable">
    <!-- 名称 -->
    <attr name="name" format="reference|string"/>
    <!-- 性别 -->
    <attr name="sex">
        <!-- 男性 -->
        <enum name="male" value="1"/>
        <!-- 女性 -->
        <enum name="female" value="0"/>
    </attr>
    <!-- 国家 -->
    <attr name="country">
        <!-- 中国 -->
        <flag name="China" value="1"/>
        <!-- 美国 -->
        <flag name="America" value="2"/>
        <!-- 日本 -->
        <flag name="Japan" value="3"/>
    </attr>
    <attr name="grow_up" format="boolean"/>
    <attr name="color" format="color"/>
    <attr name="salary" format="float"/>
    <attr name="age" format="integer"/>
    <attr name="fraction" format="fraction"/>
    <attr name="dimension" format="dimension"/>
</declare-styleable>

代码中使用

TypedArray typedArray = context.obtainStyledAttributes(attrs,R.styleable.declare_styleable);
String name = typedArray.getString(R.styleable.declare_styleable_name);
int age = typedArray.getInt(R.styleable.declare_styleable_age,18);
int country = typedArray.getInt(R.styleable.declare_styleable_country,0);
int sex = typedArray.getInt(R.styleable.declare_styleable_sex,0);
boolean grow_up = typedArray.getBoolean(R.styleable.declare_styleable_grow_up,false);
int clothescolor = typedArray.getColor(R.styleable.declare_styleable_clothescolor,0xFFFFFFFF);
float dimension = typedArray.getDimension(R.styleable.declare_styleable_dimension,50);
float salary  = typedArray.getFloat(R.styleable.declare_styleable_salary,8888.88f);
float fraction = typedArray.getFraction(R.styleable.declare_styleable_fraction,5,10,0.25f);

color,bool,integer,drawable,fraction

<color name="myBackground">#262626</color>
<bool name="bool">true</bool>
<integer name="integer">18</integer>
<drawable name="myDrawable">@drawable/pikaqiu</drawable>
<drawable name="myColor">#ff0000</drawable>
<fraction name="myFraction">15%</fraction>

style

style能够继承于已有的style,有两种继承方法

  • name
    设置name属性的名称为:继承的style名称+.+style名称
    <style name="AppTheme.MyStyle">
        <item name="android:background">@color/myBackground</item>
    </style>
  • parent
    使用parent属性指定
    <style name="MyStyle" parent="AppTheme">
        <item name="android:background">@color/myBackground</item>
    </style>

item

type包括anim,animator,array,bool,color,declare-styleable,dimen,drawable,fraction,id,integer,interpolator,menu,mipmap,raw,layout,public,plurals,string,style,transition,xml

例子:

<item name="myItemString" type="string" format="reference|string">自定义</item>
<item name="myItemId" type="id" format="reference|string"/>

使用:

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/myItemString"
    android:id="@id/myItemId"/>

array

相当于string-array和integer-array结合

    <array name="myArray" >
        <item>1</item>
        <item>2</item>
        <item>3</item>
        <item>4</item>
    </array>

plurals

plurals标签的作用是根据不同的数量返回不同的字符串结果

其中quantity定义数量,有以下几种zero,one,two,few,many,other等

例子:

<plurals name="numberOfEggs">
    <item quantity="one">There is 1 egg</item>
    <item quantity="other">There are %d eggs</item>
</plurals>

代码中使用

String str = getResources().getQuantityString(R.plurals.numberOfEggs, 21,2);

`getQuantityString(@PluralsRes int id, int quantity, Object... formatArgs)有三个参数,第一个为引用plurals,第二个为数量,即根据此参数返回不同的字符串,第三个参数即String的通配符替换,替换字符串中%d,%s,%f等

参考资料

深入Android应用开发:核心技术解析与最佳实践
android string.xml 转译、特殊字符问题