繁体   English   中英

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

[英]Creating a Drawable from xml file in Assets folder

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

适用于图像可绘制对象的普通代码对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;
    }

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

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

出于性能原因,视图膨胀在很大程度上依赖于在构建时完成的XML文件的预处理。 因此,当前无法在运行时对纯XML文件使用LayoutInflater和XmlPullParser。 它仅适用于从编译资源(R.something文件)返回的XmlPullParser。

这与使用XmlPullParser ,这是我无论如何都要结束的尝试(出于相同的原因,从流创建无效)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM