Android API Guides---Accessing Resources

访问资源
一旦您提供您的应用程序(提供参考资料讨论)的资源,您可以通过引用其资源ID应用它。所有的资源ID在你的项目的R舱,其中AAPT工具自动生成定义。
当你的应用程序编译,生成AAPT R类,其中包含资源ID在你的RES /目录中的所有资源。对于每种类型的资源,存在的R子类(例如,R.drawable所有绘图资源),并且该类型的每一个资源,有一个静态的整数(例如,R.drawable.icon)。此整数,你可以用它来检索您的资源的资源ID。
虽然R类就是指定资源ID,你永远不应该需要看有没有发现一个资源ID。一个资源ID始终组成:
资源类型:每个资源组合成一个“型,”比如串,可拉伸和布局。欲了解更多有关不同类型,请参阅资源类型。
资源名称,它可以是:文件名,不包括扩展名;或XML的android值:name属性,如果资源是一个简单的值(如字符串)。
有两种方式可以访问资源:
在代码:从一个子类的R舱,例如使用静态整数:
R.string.hello
字符串是资源类型和你好是资源名称。有很多时候,你提供这种格式的资源ID可以访问你的资源的Andr​​oid的API。见代码访问资源。
在XML中:使用也对应于在R舱定义的资源ID,例如一个特殊的XML语法:
@字符串/你好
字符串是资源类型和你好是资源名称。您可以在XML资源使用此语法,其中一个预期值,您在资源提供的任何地方。请参阅从XML访问资源。
访问资源代码

您可以通过将资源ID作为方法参数在代码中使用的资源。例如,您可以设置一个ImageView的使用setImageResource()使用RES /绘制/ myimage.png资源:

ImageView imageView = (ImageView) findViewById(R.id.myimageview);
imageView.setImageResource(R.drawable.myimage);
您还可以使用资源的方法,你可以用getResources得到的一个实例检索各资源()。


访问原始文件


虽然少见,你可能需要访问您的原始文件和目录。如果你这样做,然后保存在res文件/不会为你工作,因为只有这样,才能从资源读取资源/与资源ID。相反,你可以在资产/目录中保存你的资源。


保存在资产/目录下的文件都没有给出一个资源ID,这样你就可以不通过R类或XML资源引用它们。相反,你可以查询像一个正常的文件系统中的资产/目录中的文件和读取使用AssetManager原始数据。


但是,如果要求所有的读取原始数据(如视频或音频文件)的能力,然后保存在res /生/目录中的文件和读取的字节使用openRawResource()流。
句法


下面是引用代码中的资源的语法:


[<软件包>] R. <RESOURCE_TYPE>。<RESOURCE_NAME>
<软件包>是资源所在的包(从自己的包中引用资源时不要求)的名称。
<RESOURCE_TYPE>是资源型的R子类。
<RESOURCE_NAME>是不带扩展名或Android资源文件名:在XML元素的name属性值(简单值)。
请参见资源类型有关每个资源类型,以及如何引用它们的更多信息。


用例


有许多接受一个资源ID参数的方法和您可以检索利用资源的方法资源。你可以得到的资源与Context.getResources实例()。


这里是在代码访问资源的一些例子:

// 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.java文件手工它是由AAPT工具生成当你的项目编译。任何更改都将覆盖下一次编译。

从XML访问资源

您可以使用到现有资源的引用一些XML元素和属性定义值。创建布局文件时,您会经常这样做,提供字符串和图像为您的小部件。

例如,如果您将按钮添加到您的布局时,应使用按钮的文本字符串资源

<Button
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/submit" />
句法
这里是在XML资源引用一个资源的语法:
@ [<软件包>:]<RESOURCE_TYPE> / <RESOURCE_NAME>
<软件包>是资源所在(来自同一个包引用资源时不需要)包的名称
<资源类型>为资源类型的R子类
<RESOURCE_NAME>是不带扩展名或Android资源文件名:在XML元素的name属性值(简单值)。
请参见资源类型有关每个资源类型,以及如何引用它们的更多信息。
用例
在某些情况下,你必须在XML中使用资源的值(例如,在绘制的图像应用到小部件),但你也可以使用一个资源在XML中接受一个简单的值的任何地方。例如,如果您有包括颜色资源和一个字符串资源下列资源文件:

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <color name="opaque_red">#f00</color>
   <string name="hello">Hello!</string>
</resources>
您可以在下面的布局文件利用这些资源来设置文本的颜色和文本字符串:

<?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" />
注意:您应该在任何时候使用字符串资源,让您的应用程序可以被本地化为其他语言。有关创建替代资源(如本地化的字符串)的信息,请参阅提供替代资源。对于一个完整的本地化指南的其他语言的应用程序,请参见本地化。
你甚至可以使用的资源XML创建别名。例如,您可以创建一个可绘制资源是另一个绘制资源的别名

<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/other_drawable" />
这听起来多余的,但使用替代资源时是非常有用的。了解更多关于创建别名资源。


引用样式属性


style属性的资源可以让你引用了当前应用的主题属性的值。引用一个样式属性,您可以通过它们的造型来匹配当前主题提供的标准变化,而不是提供一个硬编码值以自定义UI元素的外观。引用样式属性本质上说,“使用由该属性定义的样式,在当前的主题。”


以引用的样式属性,名称语法几乎是相同的正常资源格式,但代替在符号(@),使用一个问号(?),和资源类型部分是可选的。 例如:


?[<软件包>:] [<RESOURCE_TYPE>/]<RESOURCE_NAME>
例如,这里是你如何能参考设置文本颜色相匹配的系统主题的“主”文本颜色的属性:

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

在这里,机器人:文字颜色属性指定当前主题样式属性的名称。 Android现在使用适用于Android的价值:在这个小部件文字颜色:textColorSecondary样式属性,用于Android的价值。由于系统资源的工具知道一个属性资源在这样的背景下预期,你不需要明确说明类型(这将是机器人?ATTR/ textColorSecondary) - 您可以排除ATTR类型。

访问平台资源

机器人包含许多标准资源,如样式,主题,和布局。要访问这些资源,限定了Android包名的资源引用。例如,Android提供了可用于在ListAdapter列表中的项目布局资源

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


你可能感兴趣的:(java,android,api,sdk,阅读)