0

我正在尝试根据用户输入在运行时加载带有图像的 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'。

我在这里想念什么?

谢谢你们。

4

0 回答 0