使用字符串、颜色、尺寸资源

     使用字符串资源、颜色资源、尺寸资源,它们对应的XML文件都将位于/res/values目录下,它们默认的文件名,以及在R类中对应的内部类如表6.2所示。

 

表6.2  字符串、颜色、尺寸资源表
 资源类型     资源文件的默认名对于R类中的内部类的名称
字符串资源 /res/values/strings.xml R.strings
颜色资源 /res/values/colors.xml R.color
尺寸资源 /res/values/dimens.xml R.dimen

 1、颜色值的定义

      Android中的颜色值是通过红(Red)、绿(Creen)、蓝(Blue)三原色,以及一个透明度(Alpha)值来表示的,颜色值总是以(#)开头,接下来就是Alpha-Red-Green-Blue的形式。其中Alpha值可以省略,如果省略了Alpha值,那么该颜色默认是完全不透明的。

      Android颜色值支持常见的4种形式。

  •  #RGB:分别指定红、绿、蓝三原色的值(只支持0-f这16级颜色)来代表颜色。
  •  #ARGB:分别指定红、绿、蓝三原色的值(只支持0-f这16级颜色)及透明度(只支持0-f这16级透明度)来代表颜色。
  •  #RRGGBB:分别指定红、绿‘蓝三原色的值(支持00-ff这156级颜色)来代表颜色。
  • #AARRGGBB:分别指定红、绿、蓝三原色的值(支持00-ff这256级颜色)以及透明度(支持00-ff这256级透明度)来代表颜色。

       上面4种形式中,A、R、G、B都代表一个十六进制的数,其中A代表透明度,R代表红色的数值、G代表绿色数值、B代表蓝色数值。

2、定义字符串、颜色、尺寸资源文件

       字符串资源文件位于/res/values 目录下,字符串资源文件的根元素是<resources...>,该元素里每个<strin.../>子元素定义一个字符串常量,其中<string.../>元素的name属性指定该常量的名称,<string.../>元素开始标签和结束标签之间的内容代表字符串值.

      如下文件是该示例的字符串资源文件。

         

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

    <string name="app_name">字符串、数字、尺寸资源</string>
    <string name="action_settings">Settings</string>
    <string name="hello_world">Hello world!</string>
    <string name="hello">Hello world,ValuesResTest!</string>
    <string name="c1">F00</string>
    <string name="c2">0F0</string>
    <string name="c3">00F</string>
    <string name="c4">0FF</string>
    <string name="c5">F0F</string>
    <string name="c6">FF0</string>
    <string name="c7">07F</string>
    <string name="c8">70F</string>
    <string name="c9">F70</string>
</resources>

    上面的程序代码中每个<string.../>元素定义一个字符串,其中<string.../>元素的name属性定义字符串的名称,<string>与</string>中间的内容就是该字符串的值。

     颜色资源文件位于/res/values目录下,颜色资源文件的根元素是<resources.../>,该元素里每个<color.../>子元素定义一个字符串常量,其中<color.../>元素里的name属性指定该颜色的名称,<color.../>元素开始标签和结束标签之间的内容代表颜色值,如以下文件是该示例的颜色资源文件。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="c1">#F00</color>
    <color name="c2">#0F0</color>
    <color name="c3">#00F</color>
    <color name="c4">#0FF</color>
    <color name="c5">#F0F</color>
    <color name="c6">#FF0</color>
    <color name="c7">#07F</color>
    <color name="c8">#70F</color>
    <color name="c9">#F70</color>
</resources>

  上面的程序代码中每个<color.../>元素定义一个字符串,其中<color.../>元素的name属性定义颜色的名称,<color>与</color>中间的内容就是该颜色的值。

   尺寸资源文件位于/res/values目录下,尺寸资源文件的根元素是<resources...>,该元素里每个<dimen.../>子元素定义一个尺寸常量,其中<dimen.../>元素的name属性指定该尺寸的名称,<dimen.../>元素开始标签和结束标签之间的内容代表尺寸,如以下代码所示。

   

<resources>

       <dimen name="spacing">8dp</dimen>
    <!-- 定义GridView组件中每个单元格的宽度、高度 -->
    <dimen name="cell_width">60dp</dimen>
    <dimen name="cell_height">66dp</dimen>
    <!-- 定义主程序标题的字体大小 -->
     <dimen name="title_font_size">18sp</dimen>
</resources>

上面三份资源文件分别定义了字符串、颜色、尺寸资源,应用程序接下来既可在XML文件中使用这些资源,也可在Java代码中使用这些资源。

 3、使用字符串、颜色、尺寸资源

      正如前面介绍的,在XML文件中使用资源按如下语法格式:

     @[<package_name>:]<resource_type>/<reource_name>

     下面程序的界面布局中大量使用了前面定义的资源。

      界面布局文件如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:gravity="center_horizontal" 
    >
<!-- 使用字符串资源,尺寸资源 -->
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/app_name"
        android:gravity="center"
        android:textSize="@dimen/title_font_size" />
    <!-- 定义一个GridView组件,使用尺寸资源中定义的长度来指定水平间距、垂直间距 -->
    <GridView android:id="@+id/grid01"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:horizontalSpacing="@dimen/spacing"
        android:verticalSpacing="@dimen/spacing"
        android:numColumns="3"
        android:gravity="center"></GridView>
</LinearLayout>

  上面的程序中粗体字代码就是使用字符串资源、尺寸资源的代码。
   在Java代码中使用资源按如下语法格式:

    [<package_name>.]R.<resource_type>.<resource_name>

    下面的Java程序中使用了上面定义的三种资源。

    

package com.example.studyresources;

import android.os.Bundle;
import android.app.Activity;
import android.content.res.Resources;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.TextView;

public class ValuesResTest extends Activity {
      //使用字符串资源
    int[] textIds=new int[]{
            R.string.c1,R.string.c2,R.string.c3,
            R.string.c4,R.string.c5,R.string.c6,
            R.string.c7,R.string.c8,R.string.c9};
    //使用颜色资源
    int[] colorIds=new int[]{
            R.color.c1,R.color.c2,R.color.c3,
            R.color.c4,R.color.c5,R.color.c6,
            R.color.c7,R.color.c8,R.color.c9
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_values_res_test);
        //创建一个BaseAdapter对象
        BaseAdapter ba=new BaseAdapter()
        {

            @Override
            public int getCount() {
                // TODO Auto-generated method stub
                //指定一共包含9个选项
                return textIds.length;
            }

            @Override
            public Object getItem(int position) {
                // TODO Auto-generated method stub
                //
                return getResources().getText(textIds[position]);
            }

            @Override
            public long getItemId(int position) {
                // TODO Auto-generated method stub
                return position;
            }

            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                // TODO Auto-generated method stub
                TextView text=new TextView(ValuesResTest.this);
                Resources res=ValuesResTest.this.getResources();
                //使用尺度资源来设置文本框的高度、宽度
                text.setWidth((int)res.getDimension(R.dimen.cell_width));
                text.setHeight((int)res.getDimension(R.dimen.cell_height));
                //使用字符串资源设置文本框的内容
                text.setText(textIds[position]);
                //使用颜色资源来设置文本框的背景色
                text.setBackgroundResource(colorIds[position]);
                text.setTextSize(20);
                text.setTextSize(getResources().getInteger(R.integer.font_size));
                //使用
                return text;
            }};
            
            GridView grid=(GridView)findViewById(R.id.grid01);
            //为GridView设置Adapter
            grid.setAdapter(ba);
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.values_res_test, menu);
        return true;
    }
    
}

 上面的程序中粗体字代码分别使用了前面定义的字符串资源、数组资源和颜色资源,运行上面的程序,将可以看到如图6.1所示的界面。

 与定义字符串资源类似的是,Android也允许使用资源文件来定义boolean常量,例如在/res/values目录下增加一个bools.xml文件,该文件的根元素也是<resources.../>,根元素内通过<bool.../>子元素来定义boolean常量,示例如下:

 

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <bool name="is_male">true</bool >  
  <bool name="is_big">false</bool>
</resources>

一旦在资源文件中定义了如上所示的资源文件之后,接下来在Java代码中按如下语法格式访问即可:
    [<package_name>.]R.bool.bool_name

   在XML文件中按如下格式即可访问资源:

    @[<package_name>:]bool/bool_name

   例如为了在Java代码中获取指定boolean变量的值,可通过如下代码来实现:

   Resources res=getResources();

   boolean is_male=res.getBoolean(R.bool.is_male);

   与定义字符串资源类似的是,Android也允许使用资源文件来定义整型常量,例如在/res/values目录下增加一个integers.xml文件(文件名可以自由选择),该文件的根元素也是<resources.../>,根元素内通过<integer.../>子元素来定义整刑常量,示例如下:

      

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <integer name="my_size">32</integer>  
</resources>

 一旦在资源文件中定义了如上所示的资源文件之后,接下来在Java代码中按如下语法格式访问即可。
   [<package_name>.]R.integer.integer_name

 在XML文件中按如下格式即可访问资源:

 @[<package_name>:]integer/integer_name

 例如为了在Java代码中获取指定整形变量的值,可通过如下代码来实现:

Resources res=getResources();

int my_size=res.getInteger(R.bool.my_size);

 

  

posted @ 2013-11-22 13:55  TealerProg  Views(1138)  Comments(0Edit  收藏  举报