risposta-alla-domanda-sullo-sviluppo-web-bd.com

SplashScreen con Vector allungato a schermo intero

Ho fatto il mio splash screen con questo tutorial e funziona benissimo. https://www.bignerdranch.com/blog/splash-screens-the-right-way/ Fondamentalmente ho impostato uno splascreen attraverso il tema:

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

Volevo mettere un'immagine vettoriale all'interno in questo modo:

(Drawable_splashcreen)

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

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

    />

L'immagine si estenderà attraverso lo schermo intero. Su API 23 funziona come dovrebbe. Ma su dispositivi più vecchi si tratta solo di allungamenti. Ho provato la larghezza, l'altezza e anche incasinato con le finestre ma senza successo. Qualche correzione per questo?

29
WinterChilly

Per lo splash a schermo intero prova ad usare:

Android:gravity="fill_horizontal|fill_vertical"

Se non risolvono forse la soluzione è creare immagini separate per ogni dimensione di risoluzione.


Risoluzioni più comuni:

  • Piccolo = 240 x 320 px (LDPI)
  • Medio = 320 x 480 px (MDIP)
  • Grande = 480 x 800 px (hdpi)
  • xLarge = 640 x 960px (xhdpi)

Formato verticale:

  • ldpi = 240 x 360px (0,75 x mdpi)
  • mdpi = 320 x 480px (densità di base) 
  • 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)

Landscape Format (formato verticale invertito):

  • ldpi = 360 x 240 px (0,75 x mdpi)
  • mdpi = 480 x 320px (densità di base) 
  • 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)

Altre informazioni su di te possono essere trovate qui:

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

  2. Dimensioni dell'immagine dello splash screen Android per adattarsi a tutti i dispositivi

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

8
ℛɑƒæĿ

Mi sono imbattuto nello stesso problema . Sfortunatamente non sembra esserci la possibilità di far funzionare lo splash screen solo con un vettore drawable per pre API 23.

Il problema è che non puoi caricare VectorDrawableCompat al di fuori del processo, come in questo caso nei tuoi temi Android: windowBackground. Quindi, quello che probabilmente sta succedendo qui è che su API 21 i Vector get sono convertiti in un PNG per essere compatibili. Quindi nel <layered-list> il PNG convertito viene inserito nell'elemento <item>, che fa sì che la bitmap si estenda su tutti i bordi, perché manca l'elemento <bitmap>.

Quindi la mia soluzione è la seguente: 

Crea un drawable_splashscreen.xml all'interno della cartella drawables-v23 che sembra il seguente per il vettore drawable

<?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>

Quindi crea un altro drawable_splashscreen.xml ma all'interno della normale cartella drawables

<?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>

Si noti l'elemento <bitmap>. Così ora, quando il PNG viene utilizzato su dispositivi pre-API 23, verrà visualizzato correttamente e non verrà esteso a tutto lo sfondo. Sfortunatamente devi anche fornire una schermata iniziale come PNG affinché funzioni nelle vecchie API. Ma per ogni dispositivo con API 23+ verrà utilizzato il vettore drawable.

Spero che questa risposta possa aiutare qualcuno che sta correndo nello stesso problema!

1
Airbagman

Usa bitmap e definisci la tua immagine in src. Imposta la gravità al centro

    <?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

Non penso che questo sia possibile fare con i vettori, per i dispositivi <API 23, dal momento che non è possibile impostare gli attributi Android: altezza e Android: larghezza sul drawable.

Per implementare la mia schermata iniziale con un'icona centrata, ho dovuto esportare il vettore del mio logo in .png per ogni dimensione dello schermo e incorporare una bitmap all'interno dell'elenco dei livelli:

<?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>

Idealmente non mi piacerebbe avere alcuna immagine bitmap nelle mie risorse, ma almeno lo splash screen è l'unico posto in cui ho dovuto usare bitmap.

0
Kirk