AndroidリソースIDの詳細
通常、FindViewByIDメソッドを使用してリソースを取得します。たとえば、このようなステートメントをOnCreateメソッドで使用することがよくあります。
btnchecked =(imageView)findViewById(r.id.imgcheck);
FindViewByIDは、ボタン、ラベル、ListView、ImageViewなどのレイアウトでさまざまなビューオブジェクトを取得するための便利な方法です。名前が示すように、intパラメーター:リソースIDが必要です。
リソースIDは非常に便利です。 Androidは、さまざまな画像ファイルやXMLテキストの「@+ID」オブジェクトなど、RESディレクトリにある各リソースにIDを自動的に割り当てます。 resのサブディレクトリは、描画可能なxxxx、レイアウト、値、および珍しいもの:anim、xml、row、colorなど、毎回見ることができるものなど、ほとんど常に固定されています。
Androidの教科書はあなたに教えてください:
res/ drawable/は、画像ファイルを保存するために使用されます。
RES/レイアウト/は、レイアウト定義ファイルを保存するために使用されます。
RES/値/は、いくつかの変数、パラメーター、その他のファイルを保存するために使用されます。
これは私たちがすでに知っているすべてです。さらに、AndroidはRESディレクトリ内のすべてのリソースにIDを割り当て、その主な割り当ての原則は次のとおりです。
描画可能な画像ファイルは、常にファイルごとに1つのリソースIDです。
Android:Id =”@+id/xxx”を使用するXMLファイルの各ビューには、未使用のリソースIDが割り当てられます。
たぶん、誰もが他のより複雑なルールを追加するでしょう。
ADK APIには、リソースIDをパラメーターとして実際に使用する多くの方法があります。
たとえば、getDrawableメソッド:
getResources()。getDrawable(r.drawable.sendsms_bk));
文字通り、getResourcesメソッドはAndroid.content.res.resourcesオブジェクトを返します。
GetDrawalbeメソッドは、描画可能なオブジェクトを返します。これは画像であることがわかります。
GetDrawableメソッドで使用されるパラメーターは、リソースIDです。
ただし、これらのINTリソースIDはどのような数字ですか?またはそれらがすべて配置されている場所。十分に注意している場合は、GENディレクトリのR.Javaファイルでそれらを見つけることができます。各16進整数IDには非常にOO属性名があり、それらはすべてパブリック静的な最終的なものであり、手動で変更しないことをお勧めします。これらのリソースIDは、異なるクラスの階層にあります。注意深く見ると、いくつかのルールが見つかります。たとえば、描画可能なクラスのリソースIDは、実際にはres/drawableディレクトリの画像ファイルを表します。レイアウトクラスに含まれるリソースIDは、実際にはRES/レイアウトディレクトリのXMLファイルを表します。 IDクラスに含まれるリソースIDは、実際にはAndroid:id = "@+id/xxx"を使用してウィジェットオブジェクトを表します。もちろん、「@+Tire/xxx」を使用する場合、コンパイル時にタイヤと呼ばれるクラスがR.Javaで作成されます。
上記の理解により、リソースIDは「R」から始まる変数またはプロパティであることがわかりました。 - それはすべてRクラスで定義されているため - このクラスはAndroid.Rと同じRではなく、同じパッケージレベルではありません。前者は、android.r.layout.simple_expandable_list_item_1、android.l.layout.simple_expandable_list_list_item_2など、Androidフレームワークのリソースを定義します。これらのリソースを使用しましたか?時間があれば、試してみることもできます。もう1つのRは独自のRで、独自のリソースIDを定義しています。オブジェクト指向のr.xxx.yyyでリソースIDを使用できます。もちろん、16進数で直接使用できます。
AndroidではリソースIDが非常に重要であるため、リソースIDを取得している限りリソースを取得できます。場合によっては、リソースIDとして定数を使用することはできないため(変数に置き換えたいため)、2つの方法でリソースIDを動的にしか取得できないためです。
1。反射
Javaの反射は非常に強力であるため、必死になっているときはいつも考えています。コードを見てみましょう:
try {field field = r.drawable.class.getfield(type); int i = field.getint(new R.Drawable()); log.d(tag、i+""); return i;} catch(例外e){log.e(tag、e.tostring()); R.drawable.unknow;}を返しますタイプは変数であり、その可能性のある値は「クローズ」、「編集」、「アイコン」などになります。Javaの反射クラスフィールドを使用して、R.Drawableクラスの下のフィールドにアクセスします。実際、R.Drawableの下のフィールドは、res.Drawable-XXXXディレクトリの画像ファイルのリソースIDであることがわかっています。したがって、上記のコードを実行することは、実際には、文字列を介して対応する画像ファイルのリソースIDを取得することです。たとえば、タイプの値が「アイコン」の場合、上記のコードは、res.drawable-xxxxディレクトリのicon.png画像ファイルのリソースIDを取得し、それを返します。リソースIDを介してImageViewに画像を表示するのは自然です。
2。リソースクラスのgetIdentifierメソッドを使用します
反射を使用することはまだ手間です。 Android.content.res.resourcesクラスを使用して同じことをする場合、それは2つの文です。
リソースres = getResources(); REST RES.GETIDENTIFIER(Type、 "Drawable"、getPackageName());
GetResourcesメソッドは、ContextXT(つまり、アクティビティクラス)から来ており、リソースオブジェクトを直接返すことができます。 GetIdentifierのリソース方法は、R.JavaのリソースIDを返すことができます。もちろん、フィールド名、クラス名、パッケージ名の3つのパラメーターを指定する必要があります。パッケージ名のパッケージ名の部分は、パッケージ名で指定されています。 rの完全な資格のある名前がAndroid.rまたはcom.company.rの場合、パッケージ名は「android」または「com.company」です。 getPackageNameは実際にはthis.getPackageName()であり、このクラスのパッケージ名を直接返します。
クラス名は、リソースが属するクラスです。たとえば、私たちが知っているように、R.Javaクラスのいくつかの固定クラス:描画可能、ID、文字列、レイアウトなど、および多くのリソースIDがその下に定義されています。
フィールド名はリソースIDの名前です。たとえば、リソースID定義:
public static final int del = 0x7f020002;
DelはリソースIDの名前であり、0x7F020002はその16進価値です。
3つのパラメーターを使用すると、GetIdentifierメソッドは動的メソッドを比較することでリソースIDを取得できます。
読んでくれてありがとう、私はそれがあなたを助けることができることを願っています。このサイトへのご支援ありがとうございます!