android各种资源详解

1、字符数组
     字符串数组资源由<string-array>标签定义,在<string-array>标签中包含的若干<item>标签表示数组元素。
  例如
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array  name="planets_array">
        <item>Mercury</item>
        <item>Values</item>
        <item>Earth</item>
        <item>Mars</item>
    </string-array>
</resources>

在代码中引用字符串数组的代码如下:
String[] plans=getResources().getStringArray(R.array.planets_array);

注意:不能用字符串数据资源设置接收字符串的属性,例如,android:text,因为这样系统会直接将字符串数组资源的ID值
当做文本传给该属性,应该用字符串资源设置那些可以接收字符串数组资源的属性。

2、复数字符串

<?xml version="1.0" encoding="utf-8"?>

<resources>

<plurals

name="plural_name">

<item_plurals

quantity=["zero" | "one" | "two" | "few" | "many" | "other"]

>text_string</item>

</plurals>

</resources>

 

            zero           语言需要对数字0进行特殊处理。(比如阿拉伯语)
 

            one      语言需要对类似1的数字进行特殊处理。(比如英语和其它大多数语言里的1;在俄语里,任何以1结尾但不以11结尾的数也属于此类型。)
 

            two           语言需要对类似2的数字进行特殊处理。(比如威尔士语)
 

            few            语言需要对较小数字进行特殊处理(比如捷克语里的2、3、4;或者波兰语里以2、3、4结尾但不是12、13、14的数。)
 

            many      语言需要对较大数字进行特殊处理(比如马耳他语里以11-99结尾的数)
 

            other          语言不需要对数字进行特殊处理。

 使用复数字符串资源可以使用getQuantityString方法,该方法有两个重载形式,它们的原型如下:
 public String getQuantityString(int id, int quantity) throws NotFoundException;
 public String getQuantityString(int id, int quantity, Object... formatArgs)throws NotFoundException; 

其中id参数表示复数字符串资源的ID,quantity参数表示具体的数字,例如,1对应quantity属性值的"one",2对应quantity属性值的"two"。formatArgs参数表示复数字符串资源的参数。
 
 //  引用数字为1的复数字符串资源  setTitle(getResources().getQuantityString(               
 R.plurals.numberOfSongsAvailable, 1)); 
 //  引用数字为other的复数字符串资源,调用时向other资源传递一个参数值(20)
 setTitle(getResources().getQuantityString(              
 R.plurals.numberOfSongsAvailable, 20, 20)); 

 
 3、在字符串中使用引号
     字符串中的值虽然可以任意指定,但遇到特殊符号时,如双引号、单引号,就需要采取特殊的方法进行处理
  如果是('),可以使用转义符(\)或使用双引号(")将整个字符串括起来。如果是双引号,可以在双引号前使用转义符(\)。例如:
  <!-- 输出This'll work -->
    <string name="str1">"This'll work"</string>
    <!--输出This 'll also work  -->
    <string name="str2">This \'ll also work</string>
    <!-- 输出"apple" -->
    <string name="str3">\"apple\"</string>
 
 4、用占位符格式化字符串 
    String.format(String,Object..)方法可以格式化带占位符的字符串。因此,只要在字符串资源中插入占位符就可以
 是用String.format方法格式化字符串资源。format方法要求占位符用%1、%2、。。。%n表示。其中第n个占位符于format
 方法的n+1个参数值对应。

 带占位符的字符串资源
 <!-- $s 表示该占位符要求传入字符串, $d 表示该占位符要求传入整数  %后面的整数表示第几个占位符-->
    <string name="welcome">hello, %1$s! youhanv %2$d/%3$d new messages</string>
 
 格式化字符串资源的java代码
 String textString=String.format(getResources().getString(R.string.welcome), "hello",18,20);

  5、用HTML标签格式化字符串资源
     字符串资源支持一些HTML标签,因此,可以直接在字符串资源中使用这些HTML标签格式化字符串。
  用HTMl标签格式化的字符串资源
  <string name="welcome">Welcome to <b>Android<b/></string>
 
 字符串资源支持如下的HTML标签
 <b>:粗体字
 <i>:斜体字
 <u>:带下划线的文字
 有时需要同时使用HTML标签和占位符格式化字符串,但使用String.format方法格式字符串,会忽略字符串中所有的HTML标签。为了是
 format方法可以格式化带HTMl标签的字符,需要使用Html.fromHTML方法先处理一下字符串。例如
 <string name="welcome">hello, %1$s! You have $lt; <b> %2d new messages$lt;</b></string>
 
 注意:由于需要使用Html.formatHTML方法处理字符串,因此,HTMl标签中的"<"需要使用"&lt;" 表示(">"可以直接使用)
 使用字符串资源的Java代码
 String textString=String.format(getResources().getString(R.string.welcome), "hello",18,20);
    CharSequence styledText=Html.fromHtml(text);
 如果format 的某个参数值包含HTML的特殊字符串,如"<","&",可以使用下面的代码先格式化这个参数值,在使用format方法格式化字符串
 //username中包含HTML的特殊字符
 String escapedUsername=TextUtil.htmlEncode()username;
 String textString=String.format(getResources().getString(R.string.welcome),escapedUsername,malCount);
    CharSequence styledText=Html.fromHtml(text);

  6、值资源
     所有放到res/values目录中的资源都属于值资源(可以存放在任意的XML文件中)。
  1、整数资源
    整数资源使用<integer>标签设置,代码如下:
    <integer name="height">75</integer>
    <integer name="width">75</integer>
    在资源文件中使用的代码
    <TextView
        android:id="@+id/text"
        android:layout_width="@integer/height"
        android:layout_height="@integer/width"
        android:layout_alignParentBottom="true"
        android:text="@string/str3"
        />
  下面是引用整数资源的java代码
  int width=getResources.getInteger(R.integer.width);
 2、尺寸资源
    尺寸资源是由一系列的浮点数组成的资源,这些资源需要在res/values目录的资源文件中定义,<dimen>标签用来定义尺寸资源。
    <dimen name="size_px">50px</dimen>
       <dimen name="size_in">1.5in</dimen>
       <dimen name="size_sp">10sp</dimen>
    使用java代码获取尺寸资源,这些方法会根据相应的尺寸单位返回与其对应的像素值
    float size1=getResources().getDimension(R.dimen.size_in);
   
    如果想直接获取尺寸大小(不转化成像素),可以使用下面的代码
    TypedValue outValue=new TypedValue();
  //getValue方法的第3个参数如果为true,表示即使资源值引用了另外的资源,系统会通过递归的方法获取最终的资源
  getResources().getValue(R.dimen.size_px, outValue, true);
  //由于getValue方法并没有直接返回尺寸资源的值,所以需要使用complexToFloat方法进行转换
  float value=TypedValue.complexToFloat(outValue.data);
 3、颜色资源
    颜色资源用于指定颜色值,使用<color>标签设置,代码如下
    <color name="red">#f00</color>
    java代码获取代码
    int color=getResources().getColor(R.color.red);
 4、ID资源
    ID资源实际上就是android:id属性的值,使用<item>标签设置,代码如下:
    <item type="id" name="button_ok"></item>
       <item type="id" name="dialog_exit"></item>
    资源文件中引用ID资源的代码如下:
    <Button android:id="@id/button_ok"/>
    通常在设置android:id属性时都会在“@”和“id”之间加一个“+”,代码如下:
    <Button android:id="@+id/button_ok"/>
    这个“+”的含义是如果ID资源不存在,系统会自动创建一个ID资源,如果ID资源存在,系统会忽略“+”。
    通过这种策略避免在设置android:id属性值时都要定义ID资源的繁琐方式。
    注意:尽管所有可接受ID资源的属性都可以使用“+”,但建议只在android:id属性值使用“+".这是因为其他的属性需要使用已经存在的ID
    资源对应的控件,如果使用”+“,当指定的ID资源不存在是系统会自动创建一个ID资源,这样尽管ID资源存在了,但并未对应任何的控件,可能
    会使程序抛出异常,也不会是程序达到预先设定的效果。例如,<RelativeLayout>标签的android:layout_marginLeft属性就必须设置一个
    已经与某个控件绑定的ID资源。
   
 5、整数数组资源
    整数数组资源用于存储一组整数,用<integer-array>标签设置,代码如下:
    <integer-array name="bits">
         <item>4</item>
         <item>5</item>
         <item>6</item>
         <item>7</item>
       </integer-array>
    引用整数数组资源的java代码如下:
    int[] bits=getResources().getIntArray(R.array.bits);
   
 6、类型数组资源
    类型数组资源可以将其中资源作为数组存储,因此也可以称为资源数组资源。
    <array name="icons">
         <item>@drawable/home</item>
    </array>
    <array name="colos">
         <item>#ffff0000</item>
    </array>
   
    引用类型数组资源的java代码如下:
    TypeArray drawable=getResources().obtainTypedArray(R.array.icons);
    Drawable drawable=icons.getDrawable(0);
   
    TypeArray color=getResources().obtainTypedArray(R.array.colos);
    int color=color.getColor(0,0)
    
    
    
    
 
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值