资源的类型及存储方式——使用资源

       在Android应用中使用资源可分为在Java代码和XML文件中使用资源,其中Java代码用于为Android应用定义四大组件,而XML文件中则用于为Android应用定义各种资源。

       1、在Java代码中使用资源清单项

        由于Android SDK会在编译应用时在R类中为/res目录下的所有资源创建索引项,因此在Java代码中访问资源主要通过R类来完成,其完整的语法格式为:

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

        上面语法格式中各成分的说明如下。

  • <package_name>:指定R类所在包,实际上就是使用全限定类名。当然,如果在Java程序中导入R类所在包,就可以省略包名。
  • <resources_type>:R类中代表不同资源类型的子类,例如string代表字符串资源。
  • <resources_name>:指定资源的名称。该资源名称可能是无后缀的文件名(如图片资源),也可能是XML资源元素中由android:name属性所指定的名称。   

       例如如下代码片段:

      

//从drawable资源中加载图片,并设为该窗口的背景

      getWindow().setBackgroundDrawableResource(R.drawable.back);

       //从string资源中获取指定字符串资源,并设置该窗口的标题

       getWindow().setTitle(getResources().getText(R.string.main_title)) 

      //获取指定的TextView组件,并设置该组件显示string资源中的指定字符串资源

      TextView msg=(TextView)findViewById(R.id.msg);

      msg.setText(R.string.hello_message);     

        2、在Java代码中访问实际资源
         R 资源清单类为所有的资源都定义了一个资源清单项,但这个清单项只是一个int类型的值,并不是实际的资源对象。大部分情况下,Android应用的API允许直接使用int类型的资源清单项代替应用资源。

         但有些时候,程序也需要使用实际的Android资源,为了通过资源清单项目来获取实际资源,可以借助于Android提供的Resources类。

         Reources主要通过了如下两类方法。

  • getXxx(int id):根据资源清单ID来获取实际资源。
  • getAssets():获取访问/assets/目录下资源的AssetManager对象。

        Resources由Context调用getResources()方法来获取。

       下面的代码片段示范了如何通过Resources获取实际字符串资源。

     

  //直接调用Activity的getResources()方法来获取Resources对象

       Resources res=getResources();

       //获取字符串资源

        String mainTitle res.getText(R.string.main_title);

       //获取Drawable资源

       Drawable logo=res.getDrawable(R.drawable.logo);

      //获取数组资源

     int[] arr=res.getIntArray(R.array.books);

          3、在XML代码中使用资源
               当定义XML资源文件时,其中的XML元素可能需要指定不同的值,这些值可设置为已定义的资源项。在XML代码中使用资源的完整语法格式为:

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

           上面语法格式中各成分的说明如下。 

  •   <package_name>:指定资源类所在应用的包。如果所引用的资源和当前资源位于同一个包下,则<package_name>可以省略。
  • <resource_type>:R类中代表不同资源类型的子类。
  • <resource_name>:指定资源的名称。该资源名称可能是无后缀的文件名(如图片资源),也可能是XML资源元素中由android:name属性所指定的名称。              

        例如如下代码片段在一份文件中定义了两种资源:

     

<? version="1.0" encodig="utf-8">
<resources>
<color name="red">#ff00</color>
<string name="hello">Hello!</string>
</resources>

      接下来与它位于同一包中的XML资源文件就可通过如下方式来使用资源:
     

<EditText     xmlns:android="http://schemas.android.com/apk/res/android"
       android:textColor="@color/red"
android:text="@string/hello"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    />

 

 

                

   

posted @ 2013-11-22 11:42  TealerProg  Views(664)  Comments(0Edit  收藏  举报