답변:
이런 식으로 :
String mDrawableName = "myappicon";
int resID = getResources().getIdentifier(mDrawableName , "drawable", getPackageName());
getResources().getIdentifier(name, "id", getPackageName());
(R.id.name과 마찬가지로) ImageButton의 ID를 얻는 데 사용 합니다.
name
입니까? 내가 알고있는 버튼의 ID를 찾고 싶습니다. 제 경우에는button1
getResource()
및 getPackageName()
오류를 보여주는. cannot resolve method
getResource()
및 getPackageName()
Activity의 메소드입니다.
당신은 또한 이것을 시도 할 수 있습니다 :
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);
}
이 URL을 아래 URL에서 복사했습니다. 이 페이지에서 수행 된 테스트에 따르면 getIdentifier ()보다 5 배 빠릅니다. 또한 더 편리하고 사용하기 쉽다는 것을 알았습니다. 그것이 당신에게도 도움이되기를 바랍니다.
퍼블릭 시스템 리소스의 예 :
// this will get id for android.R.drawable.ic_dialog_alert
int id = Resources.getSystem().getIdentifier("ic_dialog_alert", "drawable", "android");
또 다른 방법은 android.R.drawable 클래스 의 설명서를 참조하는 것입니다 .
이 함수를 사용하여 리소스 ID를 얻을 수 있습니다.
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)
}
}
따라서 Drawable Resource ID 를 얻으려면 다음 과 같이 메소드를 호출하십시오.
getResourseId(MyActivity.this, "myIcon", "drawable", getPackageName());
(또는 조각에서) :
getResourseId(getActivity(), "myIcon", "drawable", getActivity().getPackageName());
A의 문자열 리소스 ID는 다음과 같이 호출 할 수 있습니다 :
getResourseId(getActivity(), "myAppName", "string", getActivity().getPackageName());
기타...
주의 : 리소스 ID를 찾지 못하면 RuntimeException이 발생합니다. 프로덕션 환경에서 올바르게 복구하십시오.
static
그렇지 getResources()
않으면 작동하지 않습니다.
Context
사용할 수 없었습니다. 수정은 static
그것을 제거 하고 Context
(예를 들어 Activity
또는 Application
); 또는 대체 수정은 Jonathan이 편집에서 수행 한 작업 Context
으로, 메소드 에 전달 하는 것입니다.