(Android)API Guides/Accessing Resources

原文链接:点击打

一旦你创建好了资源文件,即可通过资源ID来引用它们,所有这些IDs都在工程的R类,由aapt工具自动生成。

当你的应用编译时,aapt自动生成R类。它包含所有在res/目录里面的资源文件。每一种资源类型,都有一个R子类。每个该类型的资源都有一个静态整型。这个整型就是资源的ID。

尽管R类保存了所有资源文件的IDs,你也无须到里面查找。一个资源ID通常由以下组成:

  A. 资源类型,每一个资源都被分为一组“类型”,比如,string, drawable, layout. 可以查看这里寻找更多信息。

  B. 资源名字,也是资源文件名,扩展名除外。或者是XML里面android:name属性值,如果资源只是简单的一个值(比如 string)。


有两种方式可以访问资源:

 A. 在code里面:从你的R子类里面获取一个静态整型值。比如:R.string.hello

     string是资源类型,hello是资源名字。有很多APIs可以访问你的资源。

 B. 在XML里面:使用特定的XML语法,它将对应资源ID。比如:@strin /hello

     string是资源类型,hello是名字。你可以使用该语法在XML任何一个地方。


在Code里面访问资源


你可以通过将资源ID作为参数传到方法里面来在code里面使用资源,比如,你可以通过setImageResource():使用res/drawable/myimage.png作为参数来设置一个ImageView

ImageView imageView = (ImageView) findViewById(R.id.myimageview);
imageView.setImageResource(R.drawable.myimage);

你可以使用getResources()来获取一个Resources,实例,使用Resources,中方法获取单独则资源。


语法

在code里面引用资源的语法:

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

<package_name>:资源存储的包命(当资源是本应用包名时可以省略)。

<resource_type>:R子类里面的资源类型。

<resource_name>:不带扩展名字的文件名,或者是XML元素里面android:name属性值。


用例

可以使用很多方法获取资源ID,也有很多方法可以返回相关的资源。

下面是访问资源一些例子:

// Load a background for the current screen from a drawable resource
getWindow().setBackgroundDrawableResource(R.drawable.my_background_image) ;

// Set the Activity title by getting a string from the Resources object, because
//  this method requires a CharSequence rather than a resource ID
getWindow().setTitle(getResources().getText(R.string.main_title));

// Load a custom layout for the current screen
setContentView(R.layout.main_screen);

// Set a slide in animation by getting an Animation from the Resources object
mFlipper.setInAnimation(AnimationUtils.loadAnimation(this,
        R.anim.hyperspace_in));

// Set the text on a TextView object using a resource ID
TextView msgTextView = (TextView) findViewById(R.id.msg);
msgTextView.setText(R.string.hello_message);


注意:绝对不可以手动修改R类,它是由aapt工具自动生成。任何修改,在下一次编译都会被覆盖。


从XML中访问资源

在xml文件里面你会经常引用一些已经存在的资源,特别是在layout文件里面,你会经常这样做,比如支持一些字符串或者图片的控件。

下面例子中,就是在layout中增加一个Button控件,使用一个string资源来显示Button的文字。

<Button
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/submit" />

语法;


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

<pakcage_name>: 资源存储的包名(若是笨包名,则无需携带)。

<resource_type>: R子类的类型名

<resource_name>: 没有扩展名的文件名,或者在XML里面android:name 属性的值。


在XML中,你使用一个资源引用来给一个value赋值,比如你下面一个资源文件:

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <color name="opaque_red">#f00</color>
   <string name="hello">Hello!</string>
</resources>

你可以在layout里面使用上面的string和color资源

<?xml version="1.0" encoding="utf-8"?>
<EditText xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:textColor="@color/opaque_red"
    android:text="@string/hello" />

在本包的资源里面,你可以不必包含包名,但是若引用系统资源,则必须包含系统包名:

<?xml version="1.0" encoding="utf-8"?>
<EditText xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:textColor="@android:color/secondary_text_dark"
    android:text="@string/hello" />

注意:string资源在很多情况下都要使用, 在不同语种问题上面,你可以参照 Providing AlternativeResources来创建改变的资源,参照 Localization.,来设定本地化语言。


你甚至可以在xml文件里面创建别名,比如,你可以创建一个drawable文件,是另一个drawable的别名:

<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/other_drawable" />


别名主要用来一个资源文件被多个xml使用的情况,具体参见:点击打开链接 


引用类型属性

style 属性主要是指你可以使用当前theme里面的相关属性。语法和上面相似,只是将@变成了?:

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

比如,下面就是将textcolor设置为theme里面textColorSecondary 属性的颜色值。

<EditText id="text"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textColor="?android:textColorSecondary"
    android:text="@string/hello_world" />

由于系统资源知道在该context内该属性资源被使用,因此无需显示的标出类型(全部格式: ?android:attr/textColorSecondary)。


使用平台资源

Android系统提供了大量的系统定义资源,如layout,wiget,sytles,themes等等,为了访问这些资源,请在资源引用前面加上android包名,如下就是一个使用listview的系统layout:

setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, myarray));




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值