Details der Android -Ressourcen -ID
Normalerweise verwenden wir die FindViewById -Methode, um Ressourcen zu erhalten. Zum Beispiel verwenden wir solche Aussagen häufig in der OnCreate -Methode:
btnChecked = (ImageView) findViewById (R.Id.imgcheck);
FindViewById ist für uns eine bequeme Möglichkeit, verschiedene Ansichtsobjekte in Layout wie Schaltflächen, Beschriftungen, ListView und ImageView zu erhalten. Wie der Name schon sagt, erfordert es einen INT -Parameter: Ressourcen -ID.
Ressourcen -ID ist sehr nützlich. Android weist jeder Ressource im RES -Verzeichnis automatisch ID zu, einschließlich verschiedener Bilddateien und "@+ID" -Objekte im XML -Text. Das Unterverzeichnis von Res ist fast immer behoben, wie diejenigen, die Sie jedes Mal sehen können: Zeichnung-XXXX, Layout, Werte und ungewöhnlich: Anim, XML, Zeile, Farbe.
Android -Lehrbücher sagen Ihnen:
res/ Drawable/ wird zum Speichern von Bilddateien verwendet.
res/ layout/ wird verwendet, um Layout -Definitionsdateien zu speichern.
Res/ Werte/ wird verwendet, um einige Variablen, Parameter und andere Dateien zu speichern.
Das ist alles, was wir bereits wissen. Darüber hinaus weist Android allen Ressourcen im RES -Verzeichnis IDs zu, und seine Hauptallokationsprinzipien sind:
Die Bilddateien in Drawable sind immer eine Ressourcen -ID pro Datei.
Jede Ansicht in der XML -Datei, in der Android: id = ”@+id/xxx verwendet wird“ wird eine nicht verwendete Ressourcen -ID zugewiesen.
Vielleicht fügt jeder einige andere komplexere Regeln hinzu.
In der ADK -API gibt es viele Methoden, die die Ressourcen -ID tatsächlich als Parameter verwenden.
Zum Beispiel GetDrawable -Methode:
getResources (). getDrawable (r.Drawable.sendsms_bk));
Im wahrsten Sinne des Wortes gibt die GetResources -Methode ein android.content.res.resources -Objekt zurück.
Die GetDrawalbe -Methode gibt ein zeichnisches Objekt zurück. Wir wissen, dass dies ein Bild ist.
Der von der GetDrawable -Methode verwendete Parameter ist die Ressourcen -ID.
Welche Zahlen sind diese int -Ressourcen -IDs? Oder wo sie alle platziert sind. Wenn Sie vorsichtig genug sind, finden Sie sie in der R.Java -Datei im Gen -Verzeichnis. Jede hexadezimale Ganzzahl -ID hat einen sehr oo -Attributnamen, sie sind alle öffentliches statisches Finale, und es wird empfohlen, sie nicht manuell zu ändern. Diese Ressourcen -IDs befinden sich in verschiedenen Klassenhierarchien. Wenn Sie genau hinschauen, finden Sie einige der Regeln. Beispielsweise repräsentiert die Ressourcen -ID in der zeichnbaren Klasse tatsächlich die Bilddatei im RES/Drawable -Verzeichnis. Die in der Layout -Klasse enthaltene Ressourcen -ID repräsentiert tatsächlich die XML -Datei im RES/Layout -Verzeichnis. Die in der ID -Klasse enthaltene Ressourcen -ID repräsentiert tatsächlich das Widget -Objekt mit Android: id = "@+id/xxx" in der Layout -XML -Datei - wenn Sie "@+reifen/xxx" verwenden, wird eine Klasse namens Tire in R.Java beim Kompilieren erstellt.
Durch das obige Verständnis stellten wir fest, dass die Ressourcen -ID eine Variable oder Eigenschaft ist, die mit "R" beginnt, mit "R". - Da alles in der R -Klasse definiert ist - ist diese Klasse nicht der gleiche R wie Android.r und sie befinden sich nicht in derselben Paketebene. Ersteres definiert die Ressourcen des Android -Frameworks, wie z. Haben Sie diese Ressourcen genutzt? Wenn Sie Zeit haben, können Sie es auch versuchen. Das andere R ist unser eigener R, der unsere eigene Ressourcen -ID definiert. Wir können Ressourcen-IDs in objektorientiertem R.xxx.yyy verwenden und natürlich direkt mit hexadezimalen Nummern verwenden.
Ressourcen -ID ist in Android so wichtig, dass wir die Ressource erhalten, solange wir die Ressourcen -ID erhalten. Da wir in einigen Fällen keine Konstante als Ressourcen -ID verwenden können (da wir sie durch eine Variable ersetzen möchten), können wir die Ressourcen -ID nur dynamisch auf zwei Arten erhalten:
1. Reflexion
Javas Reflexion ist so mächtig, dass wir immer daran denken, wenn wir verzweifelt sind. Schauen wir uns einen Code an:
try {field field = r.Drawable.class.getField (Typ); int i = field.getInt (new R.Drawable ()); Log.d (Tag, i+""); return i;} catch (Ausnahme e) {log.e (tag, e.toString ()); return R.Drawable.unnow;}Typ ist eine Variable, und die möglichen Werte werden "schließen", "bearbeiten", "Symbol" usw. sein. Wir verwenden Javas Reflexionsklassenfeld, um auf ein Feld unterhalb der R.Drawable -Klasse zuzugreifen. Tatsächlich wissen wir, dass das Feld unter R.Drawable die Ressourcen-ID der Bilddatei im Verzeichnis res.Drawable-xxxx ist. Das Ausführen des oben genannten Codes soll daher die Ressourcen -ID der entsprechenden Bilddatei über eine Zeichenfolge erhalten. Wenn der Wert des Typs beispielsweise "Symbol" ist, wird der obige Code die Ressourcen-ID des Icon.png-Bilddatei im Verzeichnis res.Drawable-xxxx erhalten und an uns zurücksend. Es ist natürlich für uns, das Bild in der ImageView über die Ressourcen -ID anzuzeigen.
2. Verwenden Sie die GetIdentifiermethode der Ressourcenklasse
Die Verwendung von Reflexion ist immer noch ein Ärger. Wenn Sie die Klasse von Android.content.res.Resources verwenden, um dasselbe zu tun, sind es nur zwei Sätze:
Ressourcen res = getResources (); return Res.GetIdentifier (Typ, "Drawable", getPackagename ());
Die GetResources -Methode stammt aus dem Contextxt (dh der Aktivitätsklasse), die ein Ressourcenobjekt direkt zurückgeben kann. Die GetIdentifier -Methode der Ressourcen kann jede Ressourcen -ID in R.Java zurückgeben. Natürlich müssen Sie 3 Parameter angeben: Feldname, Klassenname und Paketame. Der Paketname Teil des voll qualifizierten Namens, der im Paketnamen angegeben ist. Wenn der vollständig qualifizierte Name von R Android.r oder com.company.r ist, lautet der Paketame "Android" oder "com.comPany". GetPackagename ist eigentlich der .Getpackagename (), der den Paketnamen dieser Klasse direkt zurückgibt.
Der Klassenname ist die Klasse, zu der die Ressource gehört. Wie wir wissen, sind unter ihnen beispielsweise mehrere feste Klassen in der R.Java -Klasse: Zeichnen, ID, String, Layout usw. und viele Ressourcen -IDs darunter definiert.
Der Feldname ist der Name der Ressourcen -ID. Zum Beispiel die Ressourcen -ID -Definition:
public static final int del = 0x7f020002;
Del ist der Name einer Ressourcen -ID, und 0x7f020002 ist der hexadezimale Wert.
Mit 3 Parametern kann die GetIdentifier -Methode die Ressourcen -ID erhalten, indem dynamische Methoden verglichen werden.
Danke fürs Lesen, ich hoffe, es kann Ihnen helfen. Vielen Dank für Ihre Unterstützung für diese Seite!