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

时间:2017-05-01 20:56:32

标签: android android-assets

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

适用于image drawables的普通代码使用xml文件返回null。有没有人对如何做到这一点有任何指示?下面的代码示例。

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;
    }

1 个答案:

答案 0 :(得分:0)

事实证明,出于性能原因,您无法执行此操作:

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

  

出于业绩原因,观点通胀严重依赖   在构建时完成的XML文件的预处理。因此,它   目前无法将LayoutInflater与XmlPullParser一起使用   在运行时通过纯XML文件;它只适用于XmlPullParser   从已编译的资源(R.something文件)返回。

这与使用XmlPullParser有关,这是我最终尝试的结果(由于同样的原因,来自流的创建并不起作用。)