在我的Android Studio项目中,我创建了一个名为assets
的自定义文件夹,该文件夹又包含另一个名为flags
的文件夹,后者又包含许多代表SVG图像的XML文件。
每当我尝试加载此类XML文件并通过函数Drawable
从中创建Drawable.createFromStream()
时,我都会获得null
。
以下是代码:
AssetManager am = getApplicationContext().getAssets();
String[] files = new String[0];
try
{
files = am.list("flags");
}
catch (IOException e)
{
e.printStackTrace();
}
// At this point, variable 'files' correctly contains all the names of my XML files
ArrayList<Drawable> drawables = new ArrayList<>();
for (String file : files)
{
Drawable d = null;
try
{
d = Drawable.createFromStream(am.open("flags/" + file), null);
}
catch (IOException e)
{
Log.i("EX2", "Second exception: " + file + " not found");
e.printStackTrace();
}
drawables.add(d);
if (d == null) // This message is always printed, but no exception occurs
Log.i("FLAG", "Null drawable");
}
从上面的代码中可以看出,即使找到XML文件,也始终会打印消息Null drawable
(事实上,不会发生异常)。
答案 0 :(得分:0)
反过来包含许多代表SVG图像的XML文件
Android无法将SVG文件用作drawable,无论是资产还是其他任何东西。请尝试使用a third-party SVG library代替Drawable.createFromStream()
。
在您的情况下,您没有SVG文件,而是从这些SVG文件创建的矢量绘图。显然,Drawable.createFromStream()
不支持这些。或者,也许您正在测试旧设备; Drawable.createFromStream()
肯定不支持Android 4.4和旧设备上的矢量绘图。在您的情况下,只需将矢量drawable存储为drawable,而不是资产。