webentwicklung-frage-antwort-db.com.de

SplashScreen mit Vector im Vollbildmodus

Ich habe meinen Begrüßungsbildschirm mit diesem Tutorial erstellt und es funktioniert super. https://www.bignerdranch.com/blog/splash-screens-the-right-way/ Grundsätzlich habe ich ein Splascreen durch ein Thema eingerichtet:

   <style name="ThemeSplash" parent="Theme.AppCompat.NoActionBar">
        <item name="Android:windowBackground">@drawable/drawable_splashcreen</item>
    </style>

Ich wollte ein Vektorbild so einfügen:

(drawable_splashcreen)

<item Android:drawable="@color/color_background_splash_screen" />

<item
    Android:drawable="@drawable/vector_najdiflet_logo"

    />

Das Bild wird durch den gesamten Bildschirm gedehnt. Auf API 23 funktioniert es wie es sollte. Aber auf älteren Geräten streckt es sich nur. Ich habe es mit Breite und Höhe ausprobiert und sogar mit Viewports durcheinander gebracht, aber kein Erfolg. Irgendwelche Korrekturen für dieses Problem?

29
WinterChilly

Für Vollbild-Splash versuchen Sie Folgendes:

Android:gravity="fill_horizontal|fill_vertical"

Wenn dies nicht der Fall ist, erstellt die Lösung möglicherweise getrennte Bilder für jede Auflösungsgröße.


Häufigste Auflösungen:

  • Klein = 240 x 320px (ldpi)
  • Mittel = 320 x 480px (mdpi)
  • Groß = 480 x 800 Pixel (HDpi)
  • xLarge = 640 x 960px (xhdpi)

Hochformat:

  • ldpi = 240 x 360px (0,75 x mdpi)
  • mdpi = 320 x 480px (Basisdichte) 
  • hdpi = 480 x 720px (1,5 x mdpi)
  • xhdpi = 640 x 960px (2 x mdpi)
  • xxhdpi = 960 x 1440px (3 x mdpi)
  • xxxhdpi = 1080 x 1920px (4 x mdpi)

Querformat (invertiertes Hochformat):

  • ldpi = 360 x 240px (0,75 x mdpi)
  • mdpi = 480 x 320px (Basisdichte) 
  • hdpi = 720 x 480px (1,5 x mdpi)
  • xhdpi = 960 x 640px (2 x mdpi)
  • xxhdpi = 1440 x 960px (3 x mdpi)
  • xxxhdpi = 1920 x 1080px (4 x mdpi)

Mehr dazu findest du hier:

  1. https://design.google.com/devices/

  2. Android-Begrüßungsbildschirmgröße für alle Geräte

  3. http://vinsol.com/blog/2014/11/20/tips-for-designers-from-a-developer/

8
ℛɑƒæĿ

Ich bin über das gleiche Problem gestolpert ... Leider scheint es nicht möglich zu sein, den Begrüßungsbildschirm mit nur einem Vektor zu versehen, der für pre API 23 gezeichnet werden kann.

Das Problem ist, dass Sie VectorDrawableCompat nicht außerhalb des Prozesses laden können, wie in diesem Fall in Ihren Themen Android: windowBackground. Was wahrscheinlich hier passiert, ist, dass der Vektor auf API 21 in ein PNG-Format konvertiert wird, um kompatibel zu sein. In <layered-list> wird also das konvertierte PNG in das <item>-Element eingefügt, wodurch die Bitmap auf alle Kanten gedehnt wird, da das <bitmap>-Element fehlt.

Meine Lösung lautet also: 

Erstellen Sie einen drawable_splashscreen.xml im Ordner drawables-v23, der für den Vektor-Zeichenblock folgendermaßen aussieht

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android" 
Android:opacity="opaque">

    <item Android:drawable="?attr/colorPrimary"/>

    <item Android:drawable="@drawable/ic_splashscreen" Android:gravity="center"/>

</layer-list>

Erstellen Sie dann einen weiteren drawable_splashscreen.xml, jedoch im regulären drawables-Ordner

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android" 
Android:opacity="opaque">

    <item Android:drawable="?attr/colorPrimary"/>

    <item>
        <bitmap Android:drawable="@drawable/ic_splashscreen" Android:gravity="center"/>
    </item>

</layer-list>

Beachten Sie das <bitmap>-Element. Wenn das PNG-Gerät jetzt auf Geräten mit API vor API 23 verwendet wird, wird es korrekt angezeigt und nicht auf den gesamten Hintergrund gedehnt. Leider müssen Sie dazu auch einen Begrüßungsbildschirm als PNG bereitstellen, um in den alten APIs zu funktionieren. Für jedes Gerät mit API 23+ wird jedoch der Vektor Drawable verwendet.

Ich hoffe, diese Antwort kann jemandem helfen, der in derselben Ausgabe läuft!

1
Airbagman

Verwenden Sie Bitmap und definieren Sie Ihr Bild in der SRC. Stellen Sie die Schwerkraft auf Mitte

    <?xml version="1.0" encoding="utf-8"?>
<layer-list
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:opacity="opaque">

    <item Android:drawable="@color/color_background_splash_screen"/>
    <item>
        <bitmap
            Android:gravity="center"
            Android:src="@drawable/ic_logo_splash"/>
    </item>
</layer-list>

 splash screen

0
Avinash kumawat

Ich glaube nicht, dass dies mit Vektoren möglich ist, für Geräte <API 23, da es nicht möglich ist, die Attribute Android: height und Android: width auf das Zeichen zu setzen.

Um meinen Begrüßungsbildschirm mit einem zentrierten Symbol zu implementieren, musste ich den Vektor meines Logos für jede Bildschirmgröße in .png-Zeichen exportieren und eine Bitmap in die Ebenenliste einbetten:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:opacity="opaque">
    <item Android:drawable="@drawable/splash_screen_background" />

    <item
        Android:left="20dp"
        Android:right="20dp">
        <bitmap
            Android:gravity="center"
            Android:scaleType="centerInside"
            Android:src="@drawable/logo_rasterised" />
    </item>

</layer-list>

Im Idealfall hätte ich keine Bitmap-Bilder in meinen Ressourcen, aber zumindest der Startbildschirm ist der einzige Ort, an dem ich Bitmaps verwenden musste.

0
Kirk