Câu trả lời:
Với một cái gì đó như thế này:
String mDrawableName = "myappicon";
int resID = getResources().getIdentifier(mDrawableName , "drawable", getPackageName());
getResources().getIdentifier(name, "id", getPackageName());
để lấy ID của ImageButton (như bạn làm với R.id.name).
name
? Tôi muốn tìm id của một nút có tham chiếu mà tôi biết, trong trường hợp của tôi làbutton1
getResource()
và getPackageName()
hiển thị lỗi. cannot resolve method
getResource()
và getPackageName()
là các phương thức từ Activity.
Bạn cũng có thể thử điều này:
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);
}
Tôi đã sao chép mã nguồn này từ URL bên dưới. Dựa trên các thử nghiệm được thực hiện trong trang này, nó nhanh hơn 5 lần so với getIdentifier (). Tôi cũng thấy nó tiện dụng và dễ sử dụng hơn. Hy vọng nó sẽ giúp bạn là tốt.
Ví dụ cho tài nguyên hệ thống công cộng:
// this will get id for android.R.drawable.ic_dialog_alert
int id = Resources.getSystem().getIdentifier("ic_dialog_alert", "drawable", "android");
Một cách khác là tham khảo tài liệu cho lớp android.R.drawable .
Bạn có thể sử dụng chức năng này để lấy ID tài nguyên:
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)
}
}
Vì vậy, nếu bạn muốn lấy ID tài nguyên có thể vẽ , bạn có thể gọi phương thức như sau:
getResourseId(MyActivity.this, "myIcon", "drawable", getPackageName());
(hoặc từ một đoạn):
getResourseId(getActivity(), "myIcon", "drawable", getActivity().getPackageName());
Đối với ID tài nguyên chuỗi, bạn có thể gọi nó như thế này:
getResourseId(getActivity(), "myAppName", "string", getActivity().getPackageName());
Vân vân...
Cẩn thận : Nó ném RuntimeException nếu không tìm thấy ID tài nguyên. Hãy chắc chắn để phục hồi đúng trong sản xuất.
static
khỏi đó, nếu không getResources()
sẽ không hoạt động.
Context
không có sẵn. Khắc phục là để loại bỏ static
và di chuyển nó vào một Context
(ví dụ Activity
hoặc Application
); hoặc sửa chữa thay thế là những gì Jonathan đã làm trong bản chỉnh sửa của mình, đó là truyền vào một Context
phương thức.