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à.
Context
non era disponibile. La correzione consisteva nel rimuoverlo static
e spostarlo in un Context
(es. Activity
O Application
); o la correzione alternativa è ciò che Jonathan ha fatto nella sua modifica, che è passare Context
al 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)