嵌入式图片未在Xamarin Android App

时间:2017-02-26 13:52:19

标签: c# visual-studio xaml xamarin xamarin.android

我按照官方Xamarin website上的指南说明如何将图像嵌入到跨平台应用中。我只为Android平台构建应用程序。

不幸的是,在Sony D5803 Z3 Compact或Android 7.1仿真器的调试过程中,图像未显示。我在Windows 10上使用VS 2017 RC。所有以前的HelloWorld应用程序,例如通过URI下载图片在我的手机上运行良好。

如果有任何帮助或建议如何排除问题,我将不胜感激。

图片picture.jpg已设置构建属性embedded resource(使用波兰语Akcja kompilacji: osadzony zasób

setting page with build property set to embedded resource

我可以看到调试文件夹中的图像,如屏幕截图所示

pictures visible in debug folder

这是我用来显示图像的XAML页面:

ImageEmbeddedPAge.xaml

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:markupExtensions="clr-namespace:HelloWorld.MarkupExtensions;assembly=HelloWorld.Droid"
             x:Class="HelloWorld.ImageEmbeddedPAge">
    <StackLayout HorizontalOptions="Center"
                VerticalOptions="Center">
        <Image x:Name="image"
               Source="{markupExtensions:ImageResource Source=HelloWorld.Images.picture.jpg}"/>
    </StackLayout>

</ContentPage>
MarkupExtensions文件夹中的

ImageResourceExtension.cs

namespace HelloWorld.MarkupExtensions
{
    [ContentProperty("Source")]
    public class ImageResourceExtension : IMarkupExtension
    {
        public string Source { get; set; }

        public object ProvideValue(IServiceProvider serviceProvider)
        {
            if (Source == null)
            {
                return null;
            }
            // Do your translation lookup here, using whatever method you require
            var imageSource = ImageSource.FromResource(Source);
            return imageSource;
        }
    }
}

App.xaml.cs

namespace HelloWorld
{
    public partial class App : Application
    {
        public App ()
        {
            InitializeComponent();

            MainPage = new ImageEmbeddedPAge();
        }
    }
}

1 个答案:

答案 0 :(得分:1)

完全同意@Cheesebaron,因为你创建了一个Xamarin.Forms共享项目,我们需要在Android项目的specially-named directories中放置分辨率图像,这些特别命名的目录都放在Resources下面 - &GT; Android项目中的Drawable文件夹。

如果您想使用嵌入式图像,我们需要为每个平台使用Portable Lib,或者只创建一个Xamarin.Forms便携式项目。如果你想自己创建一个PCL,请注意这个PCL的目标,通常它应该像下面的图像,所以它可以用于不同的平台:

enter image description here

最后要在项目中嵌入图片,默认情况下图片会显示Build Action: None,请将其设置为Build Action: EmbeddedResource

我们无法将图像放在共享项目中的原因是:

  

共享项目引用显示在解决方案资源管理器中的“引用”节点下,但共享项目中的代码和资产被视为链接到主项目中的文件。

然后将图像视为文件而不是资源。