Android リソースの基本

ほとんどすべてのAndroidアプリケーションには何らかのリソースがあります。少なくとも、多くの場合、ユーザー インターフェイスレイアウトは XML ファイルの形式になります。 Xamarin.Android アプリケーションが最初に作成されると、既定のリソースは Xamarin.Android プロジェクト テンプレートによって設定されます。

既定のリソースを構成する 5 つのファイルが Resources フォルダーに作成されました。

  • Icon.png – アプリケーションの既定のアイコン

  • Main.axml – アプリケーションの既定のユーザー インターフェイス レイアウト ファイル。 Android では .xml ファイル拡張子が使用されますが、Xamarin.Android では .axml ファイル拡張子が使用されることに注意してください。

  • Strings.xml – アプリケーションのローカライズに役立つ文字列テーブル

  • AboutResources.txt – これは必要なく、安全に削除できます。 Resources フォルダーとその中のファイルの概要を説明するだけです。

  • Resource.designer.cs – このファイルは Xamarin.Android によって自動的に生成および管理され、各リソースに割り当てられた一意の ID を保持します。 これは、Javaで記述されたAndroidアプリケーションが持つR.javaファイルと非常によく似ていて同じです。 Xamarin.Android ツールによって自動的に作成され、随時再生成されます。

リソースの作成とアクセス

リソースの作成は、該当するリソースの種類のディレクトリにファイルを追加するのと同じくらい簡単です。 次のスクリーン ショットは、ドイツ語ロケールの文字列リソースがプロジェクトに追加されたことを示しています。 Strings.xmlがファイルに追加されると、Xamarin.Android ツールによってビルド アクション自動的に AndroidResource に設定されました。

これにより、Xamarin.Android ツールでリソースを適切にコンパイルし、APK ファイルに埋め込むことができます。 何らかの理由で ビルド アクションAndroid リソースに設定されていない場合、ファイルは APK から除外され、リソースの読み込みまたはアクセスを試みると実行時エラーが発生し、アプリケーションがクラッシュします。

また、Android ではリソース項目の小文字のファイル名のみがサポートされていますが、Xamarin.Android はもう少し寛容であることに注意してください。大文字と小文字の両方のファイル名がサポートされます。 イメージ名の規則では、アンダースコアを区切り記号として小文字で使用します ( たとえば、my_image_name.png)。 ダッシュまたはスペースを区切り記号として使用する場合、リソース名を処理できないことに注意してください。

リソースがプロジェクトに追加されたら、プログラム (コード内) または XML ファイルから、アプリケーションでリソースを使用する 2 つの方法があります。

プログラムによるリソースの参照

プログラムからこれらのファイルにアクセスするには、一意のリソース ID が割り当てられます。 このリソース ID は、Resource.designer.cs ファイル内にある特別なクラスResourceで定義された整数であり、次のようになります。

public partial class Resource
{
    public partial class Attribute
    {
    }
    public partial class Drawable {
        public const int Icon=0x7f020000;
    }
    public partial class Id
    {
        public const int Textview=0x7f050000;
    }
    public partial class Layout
    {
        public const int Main=0x7f030000;
    }
    public partial class String
    {
        public const int App_Name=0x7f040001;
        public const int Hello=0x7f040000;
    }
}

各リソース ID は、リソースの種類に対応する入れ子になったクラス内に含まれています。 たとえば、ファイルIcon.pngがプロジェクトに追加されると、Xamarin.Android によってクラスがResource更新され、名前付きのIcon定数を使用して呼び出Drawableされる入れ子になったクラスが作成されます。 これにより、ファイル Icon.png をコード内で次のように Resource.Drawable.Icon呼び出すことができます。 このクラスに加えられた変更は Resource Xamarin.Android によって上書きされるため、クラスを手動で編集しないでください。

(コード内で) プログラムでリソースを参照する場合は、次の構文を使用する Resources クラス階層を使用してリソースにアクセスできます。

[<PackageName>.]Resource.<ResourceType>.<ResourceName>
  • PackageName – リソースを提供しており、他のパッケージのリソースが使用されている場合にのみ必要なパッケージ。

  • ResourceType – これは、上記の Resource クラス内にある入れ子になったリソースの種類です。

  • リソース名 – これは、リソースのファイル名 (拡張子なし) または XML 要素内にあるリソースの android:name 属性の値です。

XML からのリソースの参照

XML ファイル内のリソースには、次の特殊な構文でアクセスします。

@[<PackageName>:]<ResourceType>/<ResourceName>
  • PackageName – リソースを提供し、他のパッケージのリソースが使用されている場合にのみ必要なパッケージ。

  • ResourceType – これは、Resource クラス内にある入れ子になったリソースの種類です。

  • リソース名 – これは、リソースのファイル名 (ファイルの種類の拡張子なし ) または XML 要素内のリソースの android:name 属性の値です。

たとえば、レイアウト ファイル Main.axml の内容は次のとおりです。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
    <ImageView android:id="@+id/myImage"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/flag" />
</LinearLayout>

この例には、ImageViewフラグという名前の描画可能なリソースが必要なオブジェクトがあります。 属性が ImageViewsrc@drawable/flag. アクティビティが開始されると、Android は、flag.png という名前のファイルのディレクトリ Resource/Drawable 内を調べます (ファイル拡張子は、flag.jpgなどの別のイメージ形式である可能性があります) し、そのファイルを読み込んでに表示しますImageView。 このアプリケーションを実行すると、次の図のようになります。

ローカライズされた ImageView