Android-resources

提供:Dev Guides
移動先:案内検索

Androidリソースの整理とアクセス

優れたAndroidアプリケーションを構築するために使用するアイテムは他にもたくさんあります。 アプリケーションのコーディングとは別に、ビットマップ、色、レイアウト定義、ユーザーインターフェイス文字列、アニメーション命令など、コードが使用する静的コンテンツなど、他のさまざまな*リソース*を処理します。 これらのリソースは、プロジェクトの res/ ディレクトリの下のさまざまなサブディレクトリで常に個別に維持されます。

このチュートリアルでは、アプリケーションリソースを整理し、代替リソースを指定して、アプリケーションでそれらにアクセスする方法を説明します。

Android Studioでリソースを整理する

MyProject/
   app/
      manifest/
         AndroidManifest.xml
   java/
      MyActivity.java
      res/
         drawable/
            icon.png
         layout/
            activity_main.xml
            info.xml
         values/
            strings.xml
Sr.No. Directory & Resource Type
1

anim/

プロパティアニメーションを定義するXMLファイル。 それらはres/anim/フォルダーに保存され、 R.anim クラスからアクセスされます。

2

color/

色の状態リストを定義するXMLファイル。 それらはres/color/に保存され、 R.color クラスからアクセスされます。

3

drawable/

ビットマップ、状態リスト、シェイプ、アニメーションドロウアブルにコンパイルされた.png、.jpg、.gifまたはXMLファイルなどの画像ファイル。 それらはres/drawable/に保存され、 R.drawable クラスからアクセスされます。

4

layout/

ユーザーインターフェイスレイアウトを定義するXMLファイル。 それらはres/layout/に保存され、 R.layout クラスからアクセスされます。

5

menu/

オプションメニュー、コンテキストメニュー、サブメニューなどのアプリケーションメニューを定義するXMLファイル。 それらはres/menu/に保存され、 R.menu クラスからアクセスされます。

6

raw/

生の形式で保存する任意のファイル。 このような生ファイルを開くには、_ID._R.raw.filename_というリソースIDで_Resources.openRawResource()_を呼び出す必要があります。

7

values/

文字列、整数、色などの単純な値を含むXMLファイル。 たとえば、このディレクトリに作成できるリソースのファイル名の規則は次のとおりです-

  • リソース配列用のarrays.xml。 R.array クラスからアクセスします。
  • リソース整数のintegers.xml。 R.integer クラスからアクセスします。
  • リソースbooleanのbools.xml。 R.bool クラスからアクセスします。
  • カラー値用のcolors.xml。 R.color クラスからアクセスします。
  • ディメンション値用のdimens.xml。 R.dimen クラスからアクセスします。
  • 文字列値用のstrings.xml。 R.string クラスからアクセスします。
  • スタイル用のstyles.xml。 R.style クラスからアクセスします。
8

xml/

_Resources.getXML()_を呼び出すことにより、実行時に読み取ることができる任意のXMLファイル。 実行時に使用されるさまざまな構成ファイルをここに保存できます。

代替リソース

アプリケーションは、特定のデバイス構成をサポートする代替リソースを提供する必要があります。 たとえば、さまざまな画面解像度用の代替描画可能リソース(つまり、画像)とさまざまな言語用の代替文字列リソースを含める必要があります。 実行時に、Androidは現在のデバイス構成を検出し、アプリケーションに適切なリソースをロードします。

リソースのセットの構成固有の代替を指定するには、次の手順に従います-

  • <resources_name>-<config_qualifier> の形式で名前を付けたres/に新しいディレクトリを作成します。 ここで、 resources_name は、レイアウト、ドロウアブルなど、上記の表に記載されているリソースのいずれかです。 qualifier は、これらのリソースが使用される個々の構成を指定します。 さまざまなタイプのリソースの修飾子の完全なリストについては、公式ドキュメントを確認できます。
  • この新しいディレクトリにそれぞれの代替リソースを保存します。 リソースファイルには、次の例に示すようにデフォルトのリソースファイルとまったく同じ名前を付ける必要がありますが、これらのファイルには代替に固有のコンテンツが含まれます。 たとえば、画像ファイル名は同じですが、高解像度画面の場合、その解像度は高くなります。

以下は、デフォルト画面の画像と高解像度画面の代替画像を指定する例です。

MyProject/
   app/
      manifest/
         AndroidManifest.xml
   java/
      MyActivity.java
      res/
         drawable/
            icon.png
            background.png
         drawable-hdpi/
            icon.png
            background.png
         layout/
            activity_main.xml
            info.xml
         values/
            strings.xml

以下は、デフォルト言語のレイアウトとアラビア語の代替レイアウトを指定する別の例です。

MyProject/
   app/
      manifest/
         AndroidManifest.xml
   java/
      MyActivity.java
      res/
         drawable/
            icon.png
            background.png
         drawable-hdpi/
            icon.png
            background.png
         layout/
            activity_main.xml
            info.xml
         layout-ar/
            main.xml
         values/
            strings.xml

リソースへのアクセス

アプリケーションの開発中に、コードまたはレイアウトXMLファイルで定義されたリソースにアクセスする必要があります。 次のセクションでは、両方のシナリオでリソースにアクセスする方法について説明します-

コードでリソースにアクセスする

Androidアプリケーションがコンパイルされると、 res ディレクトリで利用可能なすべてのリソースのリソースIDを含む R クラスが生成されます。 Rクラスを使用すると、サブディレクトリとリソース名を使用して、またはリソースIDを直接使用して、そのリソースにアクセスできます。

_res/drawable/myimage.png_にアクセスしてImageViewを設定するには、次のコードを使用します-

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

ここで、コードの最初の行は、_R.id.myimageview_を使用して、レイアウトファイルでid _myimageview_で定義されたImageViewを取得します。 コードの2行目では、_R.drawable.myimage_を使用して、 myres という名前の画像を /res の下のdrawableサブディレクトリで使用できます。

_res/values/strings.xml_に次の定義がある次の例を検討してください-

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <string  name="hello">Hello, World!</string>
</resources>

今、次のようにリソースIDを使用してID msgでTextViewオブジェクトにテキストを設定することができます-

TextView msgTextView = (TextView) findViewById(R.id.msg);
msgTextView.setText(R.string.hello);

次の定義を持つレイアウト_res/layout/activity_main.xml_を考慮してください-

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:orientation="vertical" >

   <TextView android:id="@+id/text"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Hello, I am a TextView"/>

   <Button android:id="@+id/button"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Hello, I am a Button"/>

</LinearLayout>

このアプリケーションコードは、次のようにonCreate()メソッドで、アクティビティのこのレイアウトを読み込みます-

public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);
}

XMLのリソースへのアクセス

色リソースと文字列リソースを含む次のリソースXML _res/values/strings.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"/>

ここで、* Hello World!*の例を説明した前の章をもう一度見てみると、この章で説明しているすべての概念をよりよく理解できるはずです。 そのため、前の章で実際の例を確認し、非常に基本的なレベルでさまざまなリソースをどのように使用したかを確認することを強くお勧めします。