2016-03-02 31 views
11

Ich habe eine Xamarin Forms (2.0) Android App, wo ich versuche, ein Bild zu zeigen. Ich habe ein Symbol genannt bekam icon-pages-r1.png, die ich versuche, den folgenden Code zu verwenden:Xamarin Forms Bild zeigt nicht

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

Das Bild allerdings nicht angezeigt wird. Wenn ich die Quelle zu Icon.png (das Standard-Xamarin-Symbol) ändere, funktioniert es.

Das Bild ist ein halbtransparentes PNG (also ein farbiges Symbol in der Mitte und transparent um es herum), es ist 46x46 und in Windows zeigt es gut als Elementtyp PNG-Datei. Ich habe versucht, das Bild in Paint zu öffnen und erneut zu speichern (was die Transparenz zerstört), aber das funktioniert auch nicht. Die Build Action für die Bilder sind AndroidResource mit Copy to Output Directory auf Do not copy festgelegt.

Weiß jemand, warum ich dieses Bild nicht in meiner App anzeigen lassen kann?

+1

Ist es in Ressourcen/Drawable? Sie könnten auch versuchen, Ihre Lösung zu bereinigen und die Ordner bin und obj manuell zu vernichten. Manchmal hilft das. – Jason

+0

Wo ist die Build-Aktion definiert? – nishantvodoo

+0

@ keanu101 Sie können es einstellen, indem Sie zu den Eigenschaften für das Objekt gehen (Rechtsklick im Solution Explorer -> Eigenschaften). –

Antwort

18

Sie können keine Bindestriche in Bildnamen für Xamarin Android verwenden. Entfernen Sie die Bindestriche (sowohl im Dateinamen als auch in der Bildreferenz) und Sie werden festgelegt.

+3

Ugh, das war das Problem. Verdammt, ich verschwendete STUNDEN, um diese blöde undokumentierte Regel herauszufinden. Tipp an andere: Gehe zu Tools -> Optionen -> Projekte und Lösungen -> Build und Ausführen -> MSBuild Projekt Build-Ausgabe Ausführlichkeit -> setzen Sie es auf "normal" statt "minimal". Dies wird dies tatsächlich als Fehler in der Ausgabe anzeigen. –

+1

"Normal" hat es nicht für mich geschnitten. Ich musste es auf "Diagnostic" setzen, bis ich tatsächlich die Fehler in Bezug auf PNGs sah. –

8

Für andere, die hier bis Ende Mai ...

Vergewissern Sie sich die Image-Datei ist eigentlich ein Teil des Projekts (Resources \ ziehbar) und dass die Build-Aktion ist AndroidResource.

4

Wenn auf den Namen einer Bildressource in android Bindung fand ich es sein muss:

  • in Resources/Drawable Ordner
  • Satz Build Action: AndroidResource
  • Satz kopieren Ausgang: Do not kopieren
  • keine Bindestriche in Namen erlauben
  • Name ist Groß- und Kleinschreibung
0

Ich hatte dieses Problem.Ich setzte MSBuild project build output verbosity als . Jetzt habe ich folgendes in meinem Ausgabefenster gefunden, als ich nach OOM suchte.

ImageRenderer: Error loading image: Java.Lang.OutOfMemoryError: Failed to allocate a 571513228 byte allocation with 2140744 free bytes and 92MB until OOM

Jetzt versucht

  • erstellen png Bild, das weniger als 200KB Größe hat und weniger als 1400 x 1050 Größe (für Testzwecke).

Es hat gut funktioniert.

Hinweis: "MSBuild Projekt Build-Ausgabe Ausführlichkeit" kann unter Extras zu finden -> Optionen -> Projekte und Lösungen -> Erstellen und Ausführen

Allgemeine Checkpoints

  • lesen Local Images
  • Stellen Sie sicher, dass der Dateiname nur Kleinbuchstaben enthält.
  • Fügen Sie diese PNG-Datei in den Ordner Resources/Drawable ein.

eine Inhaltsseite anlegen als

<StackLayout VerticalOptions="Center" HorizontalOptions="Center"> 
    <Label Text="Pre" /> 
    <Image Source="abstracttriangleg.png" 
      Aspect="AspectFill" VerticalOptions="End" HorizontalOptions="CenterAndExpand"/> 
    <Label Text="Post" /> 
</StackLayout> 
  • Saubere Lösung folgt.
  • Reinigen Sie bin und Obj Dateien.

Resources sagt:

Android supports bitmap files in three formats: .png (preferred), .jpg (acceptable), .gif (discouraged).

Compress PNG and JPEG files sagt:

You can reduce PNG file sizes without losing image quality using tools like pngcrush, pngquant, or zopflipng. All of these tools can reduce PNG file size while preserving the perceptive image quality.

The pngcrush tool is particularly effective.

To compress JPEG files, you can use tools like packJPG and guetzli.

Referenzen:

  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

+0

Weitere Referenz: [Loading Large Bitmaps Efficiently] (https://developer.android.com/topic/performance/graphics/load-bitmap.html) und [Große Bitmaps effizient laden] (https://developer.xamarin.com/recipes/android/resources/allgemein/load_large_bitmaps_efficiently /) – Lijo

0

Für iOS

Schritt 1: Fügen Sie Ihr Bild in ios -> Ordner Resources (Wenn es nicht schaffen)

Schritt 2; Rechtsklick auf das Bild -> Eigenschaften -> Build-Aktion -> als "Inhalt"