从 Assets 文件夹中的 xml 文件创建一个 Drawable

Creating a Drawable from xml file in Assets folder

我在 assets 文件夹中有一个子文件夹,其中包含一些 xml 布局(只是简单的形状)。我的目标是能够创建一个 Drawable 对象以用作视图的背景。目前它只是简单的形状,但最终会有很多。我不想使用资源区域有几个原因(没有子文件夹,不想对资源路径进行硬编码,等等。)

适用于图像可绘制对象的普通代码 returns 空 xml 文件。有没有人对如何执行此操作有任何指示?下面的代码示例。

xml 文件:

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval">
  <stroke android:width="2dp" android:color="#c9c6af" />
  <solid android:color="#ffffffff" />
</shape>

读取文件的c#代码,与java非常相似。是的,我知道我需要关闭 InputStream:

public static Drawable GetDrawableFromAsset(Context context, string filePath)
    {
        AssetManager assetManager = context.Assets;

        Stream istr;
        Drawable drawable = null;
        try
        {
            istr = assetManager.Open(filePath);
            drawable = Drawable.CreateFromStream(istr, null);
        }
        catch (IOException e)
        {
            // handle exception
        }

        return drawable;
    }

由于性能原因,你不能这样做:

https://developer.android.com/reference/android/view/LayoutInflater.html

For performance reasons, view inflation relies heavily on pre-processing of XML files that is done at build time. Therefore, it is not currently possible to use LayoutInflater with an XmlPullParser over a plain XML file at runtime; it only works with an XmlPullParser returned from a compiled resource (R.something file.)

这与使用 XmlPullParser 有关,这是我最终不得不尝试的(出于同样的原因,从流创建不起作用。)