你真的应该在Xamarin.Forms项目中放置三份图像副本吗?
我是否做错了什么,或者没有办法在Xamarin.Forms项目中只添加一个图像,而不是在每个平台的项目中添加一个图像?这不管用你真的应该在Xamarin.Forms项目中放置三份图像副本吗?,xamarin.forms,Xamarin.forms,我是否做错了什么,或者没有办法在Xamarin.Forms项目中只添加一个图像,而不是在每个平台的项目中添加一个图像?这不管用 myImage.Source = ImageSource.FromResource("MyProject.myImage.jpg"); // yes, build action embedded resource 事实上,添加该行将在它到达该行之前导致运行时错误。但别再担心那些愚蠢的事情了 如何使用Xamarin.Forms一次性添加图像 这种方法意味着每个平台将无法
myImage.Source = ImageSource.FromResource("MyProject.myImage.jpg"); // yes, build action embedded resource
事实上,添加该行将在它到达该行之前导致运行时错误。但别再担心那些愚蠢的事情了
如何使用Xamarin.Forms一次性添加图像
这种方法意味着每个平台将无法加载不同的图像分辨率;这必须手动执行。此方法还可能导致应用程序下载大小变大
您可以在项目中只包含一次图像作为嵌入式资源
然后使用以下命令从该程序集加载它
var assemblyOfMyProject = typeof(MyProject.SomeClassInThisAssembly).GetTypeInfo().Assembly;
ImageSource.FromResource("MyProject.myImage.jpg", assemblyOfMyProject);
从NetStandard 2.0开始,可能不需要包含程序集
这里有一个用于字符串的简便扩展方法,它存储程序集,因此您只需加载一次
public static class ImageSourceExtensions
{
private static Assembly _assembly;
static ImageSourceExtensions()
{
_assembly = typeof(MyProject.SomeClass).GetTypeInfo().Assembly;
}
public static ImageSource FromResource(this string path)
{
return ImageSource.FromResource(path, _assembly);
}
}
像这样使用
ImageSource image=“MyProject.image.jpg”.FromResource()代码>但请记住,多次使用图像是完全有意义的,因为iOS和Android在设备分辨率方面选择了正确的图像(mdpi等)!如果你做得对,你将拥有三个以上的“副本”。有趣的是,2019年谷歌将推出应用捆绑,这意味着他们将根据资源和架构类型将apk转换为几种不同的apk。因此,提供几种不同的分辨率将有助于减少用户设备上的应用程序大小;SVG没有任何与传统位图格式相关的大小调整问题,因为它是按比例渲染的,当然这会带来自身的性能损失。在所有平台上对SVG的支持都在增加,一旦支持SVG动画,它将更加可定制。