从 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
有关,这是我最终不得不尝试的(出于同样的原因,从流创建不起作用。)
我在 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
有关,这是我最终不得不尝试的(出于同样的原因,从流创建不起作用。)