#android #resources #reloading
Вопрос:
Я пытаюсь загрузить изображение с изображением во время выполнения на основе пользовательского ввода. Изображения доступны только во время выполнения.
Я знаю, что единственный способ сделать это-подкласс класса ресурсов и переопределить необходимый метод. Я также знаю, что конструктор класса ресурсов теперь устарел, но в данный момент это не проблема.
Проблема в том, что Resources.getDrawable (), который, как я думал, был методом, возвращающим рисование моего изображения и требующим переопределения, кажется неправильным. Вместо того, чтобы возвращать мое изображение, оно возвращает только системные чертежи, такие как «android:drawable/screen_background_selector_dark».
Для тестирования я предоставил изображение в своем макете.
Вот мой код:
Моя Деятельность:
public class LearnActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } protected void attachBaseContext(Context base) { super.attachBaseContext(new MyContext(base)); } } //.......................... final class MyContext extends ContextWrapper { Context base; MyContext(Context base) { super(base); this.base=base; } public Resources getResources() { return new MyResources(base,super.getAssets(),super.getResources().getDisplayMetrics(),super.getResources().getConfiguration()); } } //.......................... final class MyResources extends Resources { Context base; MyResources(Context base,AssetManager assets, DisplayMetrics metrics,Configuration conf) { super(assets,metrics,conf); this.base=base; } public Drawable getDrawable(int id,Resources.Theme theme) { Toast.makeText(base,"getDrawable:n" getResourceName(id),Toast.LENGTH_LONG).show(); return super.getDrawable(id,theme); } }
мой макет:
lt;?xml version="1.0" encoding="utf-8"?gt; lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical"gt; lt;ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/icon_os"/gt; lt;/LinearLayoutgt;
В тосте отображается сообщение «android:рисованный/screen_background_selector_dark» вместо «android:рисованный/icon_os».
Что я здесь упускаю?
Спасибо вам всем.