[翻訳][Pro Android 4]——Chapter 3 Androidリソースの理解

4452 ワード

リソースの理解
リソースはAndroidアーキテクチャにおいて重要な役割を果たしています.Androidでは、リソースは一般的に実行可能なプログラムにバインドされたファイル(音楽ファイルやウィンドウレイアウトを記録するファイルなど)や値(ダイアログボックスのタイトルなど)です.これらの実行可能プログラムにバインドされたファイルまたは値は、アプリケーションを再コンパイルすることなく、プログラマが任意に変更または置換することができます.
私たちがよく知っているリソースには、文字列、色、ビットマップ、レイアウトなどがあります.代替アプリケーションのハードコーディング文字列として、リソースファイルは代替としてリソースIDを使用することを許可する.これは、ソースコードを変更することなく、プログラム内のリソースを間接的に変更することができる.
Androidには非常に多くのリソースがありますが、最初に議論するのは最も一般的なリソースです.文字列です.
文字列リソース
Androidでは、1つ以上のXMLファイルで文字列リソースを定義できます.文字列リソースの定義を含むXMLファイルは、サブディレクトリ/res/valuesの下に保存されます.このXMLファイル名は任意に命名できますが、stringというファイルはよく見られます.xml.リスト3-1には、文字列リソースファイルの例が示されています.
リスト3–1:strings.xmlの例
<?xml version="1.0" encoding="utf-8"?> 

<resources> 

    <string name="hello">hello</string> 

    <string name="app_name">hello appname</string> 

</resources> 

注:一部のEclipseのリリースでは、ノードはxmln仕様を使用する必要があります.しかし、指向は重要ではないようだ.http://schemas.android.com/apk/res/android">との2つの形式で動作します.
ファイルの最初の行では、符号化フォーマットを自由に選択できるXMLファイルであることが示されていますが、この行がなければAndroidは正常に動作します.
このファイルが作成または変更されると、EclipseのADTプラグインは、アプリケーションのR.javaというパッケージ内で指定された2つの文字列に一意のIDを自動的に作成します.次の例のR.javaファイルの場所に注意してください.これは高レベルのエンジニアリングディレクトリ構造で、MyProjectと呼ばれています.
\MyProject   \src         \com\mycompany\android\my-root-package         \com\mycompany\android\my-root-package\another-package   \gen        \com\mycompany\android\my-root-package\R.java   \assets   \res   \AndroidManifest.xml ...etc
注意:リソースファイルがいくつあっても、R.javaファイルは1つしかありません. 
For the string-resource file in Listing 3–1, the updated R.java file has the entries in Listing 3–2.
package com.mycompany.android.my-root-package; 

public final class R { 

   //...other entries depending on your project and application 

    

    public static final class string  

   { 

      //...other entries depending on your project and application 

       

        public static final int hello=0x7f040000; 

        public static final int app_name=0x7f040001; 

       

      //...other entries depending on your project and application 

    } 

   //...other entries depending on your project and application 

} 

Notice, first, how R.java defines a top-level class in the root package: public static final class R. Within that outer class of R, Android defines an inner class, static final class string. R.java creates this inner static class as a namespace to hold string resource IDs.  The two static final ints defined with variable names hello and app_name are the resource IDs that represent the corresponding string resources. You can use these resource IDs anywhere in the source code through the following code structure:  R.string.hello The generated IDs point to ints rather than strings. Most methods that take strings also take these resource identifiers as inputs. Android resolves those ints to strings where necessary.  It is merely a convention that most sample applications define all strings in one strings.xml file. Android takes any number of arbitrary files as long as the structure of the XML file looks like Listing 3–1 and the files reside in the/res/values subdirectory. The structure of this file is easy to follow. You have the root node followed by one or more child elements. Each element or node has a property called name that ends up as the id attribute in R.java. To see that multiple string resource files are allowed in this subdirectory, you can place another file with the following content in the same subdirectory and call it strings1.xml (see Listing 3–3).
Listing 3–3. Example of an Additional  strings.xml  File
<?xml version="1.0" encoding="utf-8"?> 

<resources> 

    <string name="hello1">hello 1</string> 

    <string name="app_name1">hello appname 1</string> 

</resources> 


The Eclipse ADT plug-in validates the uniqueness of these IDs at compile time and places them in R.java as two additional constants: R.string.hello1 and R.string.app_name1.