zoukankan      html  css  js  c++  java
  • 使用字符串、颜色、尺寸资源

         使用字符串资源、颜色资源、尺寸资源,它们对应的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);

     

      

  • 相关阅读:
    Java线程的5个使用技巧
    每个Java程序员需要了解的8个Java开发工具
    爱上Java和JVM的10大理由
    Git入门
    建网站的流程
    idea快捷键
    idea中ctrl+alt+方向键问题
    oracle数据库-备份
    rabbitmq路由模式、订阅、主题
    rabbitmq 工作模式、简单模式
  • 原文地址:https://www.cnblogs.com/wolipengbo/p/3437428.html
Copyright © 2011-2022 走看看