Risposte:
Con qualcosa del genere:
String mDrawableName = "myappicon";
int resID = getResources().getIdentifier(mDrawableName , "drawable", getPackageName());
getResources().getIdentifier(name, "id", getPackageName());per ottenere l'ID di un ImageButton (come si farebbe con R.id.name).
name? Voglio trovare l'id di un pulsante di cui conosco il riferimento, nel mio caso lo èbutton1
getResource()e getPackageName()mostrando errore. cannot resolve method
getResource()e getPackageName()sono metodi da Activity.
Puoi anche provare questo:
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);
}
Ho copiato questi codici sorgente dall'URL sottostante. Sulla base dei test eseguiti in questa pagina, è 5 volte più veloce di getIdentifier (). L'ho trovato anche più pratico e facile da usare. Spero che ti aiuti anche tu.
Esempio per una risorsa di sistema pubblica:
// this will get id for android.R.drawable.ic_dialog_alert
int id = Resources.getSystem().getIdentifier("ic_dialog_alert", "drawable", "android");

Un altro modo è di fare riferimento alla documentazione per la classe android.R.drawable .
È possibile utilizzare questa funzione per ottenere un ID risorsa:
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)
}
}
Quindi, se si desidera ottenere un ID risorsa disegnabile , è possibile chiamare il metodo in questo modo:
getResourseId(MyActivity.this, "myIcon", "drawable", getPackageName());
(o da un frammento):
getResourseId(getActivity(), "myIcon", "drawable", getActivity().getPackageName());
Per un ID risorsa stringa puoi chiamarlo così:
getResourseId(getActivity(), "myAppName", "string", getActivity().getPackageName());
eccetera...
Attenzione : genera una RuntimeException se non riesce a trovare l'ID risorsa. Assicurati di recuperare correttamente durante la produzione.
static, altrimenti getResources()non funzionerà.
Contextnon era disponibile. La correzione consisteva nel rimuoverlo statice spostarlo in un Context(es. ActivityO Application); o la correzione alternativa è ciò che Jonathan ha fatto nella sua modifica, che è passare Contextal metodo.
Un altro scenario che ho incontrato.
String imageName = "Hello" e quindi quando viene passato alla funzione getIdentifier come primo argomento, passerà il nome con terminazione null stringa e restituirà sempre zero. Passa questo imageName.substring (0, imageName.length () - 1)