Antworten:
Mit so etwas:
String mDrawableName = "myappicon";
int resID = getResources().getIdentifier(mDrawableName , "drawable", getPackageName());
getResources().getIdentifier(name, "id", getPackageName());
, um die ID eines ImageButton zu erhalten (wie Sie es mit R.id.name tun würden).
name
? Ich möchte die ID eines Buttons finden, dessen Referenz ich kenne, in meinem Fall ist esbutton1
getResource()
und getPackageName()
Fehler anzeigen. cannot resolve method
getResource()
und getPackageName()
sind Methoden aus Aktivität.
Sie können dies auch versuchen:
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 habe diesen Quellcode von der folgenden URL kopiert. Basierend auf den auf dieser Seite durchgeführten Tests ist es fünfmal schneller als getIdentifier (). Ich fand es auch praktischer und einfacher zu bedienen. Hoffe es hilft dir auch.
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");
Eine andere Möglichkeit besteht darin, die Dokumentation für die android.R.drawable- Klasse zu lesen .
Mit dieser Funktion können Sie eine Ressourcen-ID abrufen:
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 Resource ID erhalten möchten , können Sie die Methode folgendermaßen aufrufen:
getResourseId(MyActivity.this, "myIcon", "drawable", getPackageName());
(oder aus einem Fragment):
getResourseId(getActivity(), "myIcon", "drawable", getActivity().getPackageName());
Für eine String- Ressourcen-ID können Sie sie folgendermaßen aufrufen:
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.
static
, sonst getResources()
wird nicht funktionieren.
Context
war der nicht verfügbar. Fix war entweder zu entfernen static
und in ein Context
(zB Activity
oder Application
) zu verschieben; oder eine alternative Korrektur ist das, was Jonathan in seiner Bearbeitung getan hat, nämlich eine Context
an die Methode zu übergeben.
Ein anderes Szenario, dem ich begegnet bin.
String imageName = "Hallo". Wenn es dann als erstes Argument an die Funktion getIdentifier übergeben wird, übergibt es den Namen mit der Zeichenfolge nullterminierung und gibt immer null zurück. Übergeben Sie diesen imageName.substring (0, imageName.length () - 1)