Wie bekomme ich die Ressourcen-ID eines Bildes, wenn ich seinen Namen kenne (in Android)?Wie bekomme ich die Ressourcen-ID eines Bildes, wenn ich seinen Namen kenne?
Antwort
Damit so etwas wie:
String mDrawableName = "myappicon";
int resID = getResources().getIdentifier(mDrawableName , "drawable", getPackageName());
Sie können auch versuchen, diese:
try {
Class res = R.drawable.class;
Field field = res.getField("drawableName");
int drawableId = field.getInt(null);
}
catch (Exception e) {
Log.e("MyTag", "Failure to get drawable id.", e);
}
ich dieses Quellcodes von unten URL kopiert haben. Basierend auf Tests auf dieser Seite ist es 5 mal schneller als getIdentifier(). Ich fand es auch handlicher und einfacher zu benutzen. Hoffe es hilft dir auch.
sein, dies könnte schneller sein, aber ich habe festgestellt, dass Sie Probleme bekommen, wenn Sie proguard verwenden. Das funktioniert zumindest bei mir nicht progard –
Diese getResources(). GetIdentifier arbeitet mit Proguard –
Danke für die Nachricht :) – VSB
Mit dieser Funktion können Sie eine Ressourcen-ID erhalten:
public static int getResourseId(Context context, String pVariableName, String pResourcename, String pPackageName) throws RuntimeException {
try {
return context.getResources().getIdentifier(pVariableName, pResourcename, pPackageName);
} catch (Exception e) {
throw new RuntimeException("Error getting Resource ID.", e)
}
}
Wenn Sie also eine Drawable Ressourcen-ID erhalten möchten, können Sie kann die Methode so aufrufen:
getResourseId(MyActivity.this, "myIcon", "drawable", getPackageName());
(oder von einem Fragment):
getResourseId(getActivity(), "myIcon", "drawable", getActivity().getPackageName());
Für eine String ID Ressource Sie es so nennen kann:
getResourseId(getActivity(), "myAppName", "string", getActivity().getPackageName());
etc ...
Vorsicht: Es wird eine RuntimeException ausgelöst, wenn die Ressourcen-ID nicht gefunden wird. Stellen Sie sicher, dass Sie sich in der Produktion ordnungsgemäß erholen.
Ich denke, Sie müssen 'static' aus dem entfernen, sonst' getResources() 'wird nicht arbeiten. –
@Richard Le Mesurier, können Sie erklären warum? Vielen Dank. –
@ Leo.Han Zu dem Zeitpunkt, als ich diesen Kommentar machte, war der 'Context' nicht verfügbar. Fix war, entweder "statisch" zu entfernen und es in einen "Kontext" zu verschieben (z. B. "Aktivität" oder "Anwendung"); oder alternative Fixes ist das, was Jonathan in seinem Schnitt getan hat, der in einem 'Context' an die Methode übergeben wird. –
Beispiel für eine öffentliche Systemressource:
// this will get id for android.R.drawable.ic_dialog_alert
int id = Resources.getSystem().getIdentifier("ic_dialog_alert", "drawable", "android");
Ein anderer Weg ist die Dokumentation für android.R.drawable Klasse zu beziehen.
Ein anderes Szenario, dem ich begegnete.
String imageName = "Hallo" und dann, wenn es in getIdentifier Funktion als erstes Argument übergeben wird, wird es den Namen mit Zeichenfolge null Termination übergeben und wird immer Null zurückgeben. Übergeben Sie diese imageNameString (0, imageName.length() - 1)
Danke, das hat mir geholfen, eine Lösung für ein ähnliches Problem zu finden! Ich benutze 'getResources(). GetIdentifier (name," id ", getPackageName());' um die ID eines ImageButtons zu erhalten (wie bei R.id.name). – Select0r
Beachten Sie, dass der Zeichnungsname keine Erweiterung wie ".png" enthalten sollte – larham1
Diese Antwort sollte als akzeptiert markiert werden. –