【问题标题】:Xamarin Forms image not showingXamarin Forms 图像未显示
【发布时间】:2016-06-15 18:29:22
【问题描述】:

我有一个 Xamarin Forms (2.0) Android 应用程序,我试图在其中显示图像。我有一个名为 icon-pages-r1.png 的图标,我正在尝试使用以下代码显示它:

<Image Source="icon-pages-r1.png" />

图片没有显示。当我将源更改为 Icon.png(默认 Xamarin 图标)时,它确实可以工作。

图像是半透明的 PNG(因此中间有一个彩色图标,周围是透明的),它是 46x46,在 Windows 中它显示为项目类型 PNG 文件。我尝试在 Paint 中打开图像并重新保存它(这会破坏透明度),但这也不起作用。图片的Build ActionAndroidResourceCopy to Output Directory 设置为Do not copy

有人知道为什么我的应用无法显示此图片吗?

【问题讨论】:

  • 它在 Resources/drawable 中吗?您也可以尝试清理您的解决方案并手动删除 bin 和 obj 文件夹。有时这会有所帮助。
  • 构建操作在哪里定义?
  • @keanu101 您可以通过转到对象的属性来设置它(在解决方案资源管理器中右键单击 -> 属性)。
  • 我很长一段时间都一无所知。我正在单击项目本身,但现在我意识到我应该选择图像本身的属性。谢谢@LeonCullens

标签: android image xamarin xamarin-forms


【解决方案1】:

您不能在 Xamarin Android 的图像名称中使用连字符。去掉连字符(在文件名和图像引用中),您将被设置。

【讨论】:

  • 呃,这就是问题所在。该死的,我浪费了几个小时来弄清楚这个愚蠢的无证规则。给其他人的提示:转到工具 -> 选项 -> 项目和解决方案 -> 构建和运行 -> MSBuild 项目构建输出详细程度 -> 将其设置为“正常”而不是“最小”。这实际上会在输出中显示为错误。
  • “正常”并没有为我剪掉它。在我真正设法看到与 PNG 相关的错误之前,我必须将其设置为“诊断”。
  • 但为什么 Xamarin Android 不允许使用连字符?当您无法更新这些连字符图像时,有什么办法可以解决它们?
  • 只是为了澄清,根本问题是 Android,而不是 Xamarin 放在它上面的规则。可绘制资源名称在 Java/C# 中用作标识符,连字符也不能用作标识符名称。
  • 出于同样的原因,除了文件扩展名之前,似乎也不允许在文件名中使用点/句号/句点。
【解决方案2】:

对于可能最终来到这里的其他人......

确保图像文件实际上是项目的一部分 (Resources\drawable),并且构建操作是 AndroidResource。

【讨论】:

  • 这就是为我做的。手动将图像粘贴到文件夹中后,必须在项目中包含图像。有没有更好的方法可以自动将新图像添加到文件夹中?
  • @Bryan 您可能想尝试使用 .net 标准项目文件。在 .net 标准项目中,至少会自动添加源文件 (*.cs)。但 Xamarin android 项目可能还不兼容 .net 标准项目。
【解决方案3】:

当绑定到android中的图片资源名称时,我发现它必须是:

  • 在 Resources/Drawable 文件夹中
  • 设置构建操作:AndroidResource
  • 将复制设置为输出:不要复制
  • 不允许在名称中使用连字符
  • 名称区分大小写

【讨论】:

    【解决方案4】:

    我遇到了这个问题。我将MSBuild project build output verbosity 设置为Diagnostic。现在,当我搜索 OOM 时,我在“输出”窗口中找到了以下内容。

    ImageRenderer:加载图像时出错:Java.Lang.OutOfMemoryError:无法分配 571513228 字节分配,其中 2140744 空闲字节和 92MB 直到 OOM

    现在试过了

    • 创建一个小于 200KB 且小于 1400 X 1050 大小的 png 图像(用于测试目的)。

    效果很好。

    注意:“MSBuild 项目构建输出详细程度”可以在工具 -> 选项 -> 项目和解决方案 -> 构建和运行下找到

    一般检查点

    • 阅读Local Images
    • 确保文件名只有小写字母。
    • 将该 png 文件添加到 Resources/drawable 文件夹中。

    如下创建内容页面

    <StackLayout VerticalOptions="Center" HorizontalOptions="Center">
        <Label Text="Pre" />
        <Image Source="abstracttriangleg.png"  
               Aspect="AspectFill" VerticalOptions="End" HorizontalOptions="CenterAndExpand"/>
        <Label Text="Post" />
    </StackLayout>
    
    • 清洁溶液。
    • 清理binObj 文件。

    Resources 说:

    Android 支持三种格式的位图文件:.png(首选)、.jpg(可接受)、.gif(不鼓励)。

    Compress PNG and JPEG files 说:

    您可以使用 pngcrush、pngquant 或 zopflipng 等工具在不损失图像质量的情况下减小 PNG 文件的大小。所有这些工具都可以减少 PNG 文件的大小,同时保持可感知的图像质量。

    pngcrush 工具特别有效。

    要压缩 JPEG 文件,您可以使用 packJPG 和 guetzli 等工具。

    参考文献

    1. Android : Maximum allowed width & height of bitmap

    2. Android:java.lang.OutOfMemoryError: Failed to allocate a 23970828 byte allocation with 2097152 free bytes and 2MB until OOM

    3. Handling Bitmaps

    【解决方案5】:

    对于 iOS

    第 1 步:将图片添加到 ios -> Resources 文件夹(如果没有创建)

    第2步;右键图片->属性->构建动作->设置为“内容”

    【讨论】:

      猜你喜欢
      • 2014-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-02
      • 2020-09-05
      • 1970-01-01
      • 2018-04-22
      • 2019-10-25
      相关资源
      最近更新 更多