Respostas:
Com algo assim:
String mDrawableName = "myappicon";
int resID = getResources().getIdentifier(mDrawableName , "drawable", getPackageName());
getResources().getIdentifier(name, "id", getPackageName());
para obter o ID de um ImageButton (como você faria com R.id.name).
name
? Eu quero encontrar o id de um botão cuja referência eu sei, no meu caso, ébutton1
getResource()
e getPackageName()
mostrando erro. cannot resolve method
getResource()
e getPackageName()
são métodos da Activity.
Você também pode tentar o seguinte:
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);
}
Copiei esses códigos-fonte abaixo do URL. Com base nos testes realizados nesta página, é 5 vezes mais rápido que o getIdentifier (). Eu também achei mais útil e fácil de usar. Espero que ajude você também.
Exemplo para um recurso do sistema público:
// this will get id for android.R.drawable.ic_dialog_alert
int id = Resources.getSystem().getIdentifier("ic_dialog_alert", "drawable", "android");
Outra maneira é consultar a documentação da classe android.R.drawable .
Você pode usar esta função para obter uma identificação de recurso:
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)
}
}
Portanto, se você deseja obter um ID do recurso desenhável , pode chamar o método assim:
getResourseId(MyActivity.this, "myIcon", "drawable", getPackageName());
(ou de um fragmento):
getResourseId(getActivity(), "myIcon", "drawable", getActivity().getPackageName());
Para um ID de recurso de string , você pode chamá-lo assim:
getResourseId(getActivity(), "myAppName", "string", getActivity().getPackageName());
etc ...
Cuidado : gera uma RuntimeException se não conseguir encontrar o ID do recurso. Certifique-se de recuperar corretamente na produção.
static
isso, caso contrário getResources()
não funcionará.
Context
não estava disponível. Correção era para remover static
e movê-lo para um Context
(por exemplo, Activity
ou Application
); ou correção alternativa é o que Jonathan fez em sua edição, que é passar um Context
para o método.
Um outro cenário que encontrei.
String imageName = "Hello" e, quando for passada para a função getIdentifier como primeiro argumento, passará o nome com terminação nula da string e sempre retornará zero. Passe este imageName.substring (0, imageName.length () - 1)