Как получить доступ к ресурсам, которые можно использовать, по имени в android
В моем приложении мне нужно получить некоторые растровые рисунки где-нибудь, где я не хочу сохранять ссылку R
. Поэтому я создаю класс DrawableManager
для управления чертежами.
public class DrawableManager {
private static Context context = null;
public static void init(Context c) {
context = c;
}
public static Drawable getDrawable(String name) {
return R.drawable.?
}
}
Затем я хочу получить drawable по имени где-то вроде этого (car.png помещается внутри res/drawables):
Drawable d= DrawableManager.getDrawable("car.png");
Однако, как вы можете видеть, я не могу получить доступ к ресурсам по имени:
public static Drawable getDrawable(String name) {
return R.drawable.?
}
Любые альтернативы?
Ответы
Ответ 1
Обратите внимание, что ваш подход почти всегда является неправильным способом делать что-либо (лучше передать контекст самому объекту, который использует растягиваемое, чем сохранение статического Context
где-то).
Учитывая, что если вы хотите сделать динамическую загружаемую загрузку, вы можете использовать getIdentifier:
Resources resources = context.getResources();
final int resourceId = resources.getIdentifier(name, "drawable",
context.getPackageName());
return resources.getDrawable(resourceId);
Ответ 2
Вы можете сделать что-то вроде этого.
public static Drawable getDrawable(String name) {
Context context = YourApplication.getContext();
int resourceId = context.getResources().getIdentifier(name, "drawable", YourApplication.getContext().getPackageName());
return context.getResources().getDrawable(resourceId);
}
Чтобы получить доступ к контексту из любого места, вы можете расширить класс Application.-
public class YourApplication extends Application {
private static YourApplication instance;
public YourApplication() {
instance = this;
}
public static Context getContext() {
return instance;
}
}
И сопоставьте его в теге Manifest
application
<application
android:name=".YourApplication"
....
Ответ 3
Изменить содержание изображения:
ImageView image = (ImageView)view.findViewById(R.id.imagenElement);
int resourceImage = activity.getResources().getIdentifier(element.getImageName(), "drawable", activity.getPackageName());
image.setImageResource(resourceImage);