我正在尝试根据用户输入在运行时加载带有图像的 ImageView。图像仅在运行时可用。
我知道这样做的唯一方法是继承 Resources 类并覆盖必要的方法。我也知道 Resources 类构造函数现在已弃用,但这不是目前的问题。
问题是 Resources.getDrawable(),我认为它是返回我的图像的 Drawable 并且需要被覆盖的方法,它似乎不是正确的。它不返回我的图像,而是仅返回系统 Drawable,例如“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);
}
}
我的布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/icon_os"/>
</LinearLayout>
Toast 显示的消息是 'android:drawable/screen_background_selector_dark' 而不是 'android:drawable/icon_os'。
我在这里想念什么?
谢谢你们。