このチュートリアルでスプラッシュスクリーンを作成しましたが、うまく機能します。 https://www.bignerdranch.com/blog/splash-screens-the-right-way/ 基本的に、テーマを介してsplascreenを設定します。
<style name="ThemeSplash" parent="Theme.AppCompat.NoActionBar">
<item name="Android:windowBackground">@drawable/drawable_splashcreen</item>
</style>
次のようにベクトル画像を入れたいと思いました。
(drawable_splashcreen)
<item Android:drawable="@color/color_background_splash_screen" />
<item
Android:drawable="@drawable/vector_najdiflet_logo"
/>
画像は全画面表示されます。 API 23では、本来あるべきように動作します。しかし、古いデバイスでは、それは単なる不調です。私は幅、高さを試してみましたが、ビューポートで台無しにさえ成功しませんでした。これに対する修正はありますか?
私は同じ問題につまずいた。残念ながら、事前のAPI 23で描画可能なベクターのみでスプラッシュスクリーンを機能させる可能性はないようです。
問題は、この場合のテーマAndroid:windowBackgroundのように、プロセスの外でVectorDrawableCompatをロードできないことです。ここで起こっている可能性が高いのは、API 21でベクターが互換性のためにPNGに変換されることです。そのため、<layered-list>
に変換されたPNGが<item>
要素に挿入され、<bitmap>
要素が欠落しているため、ビットマップがすべてのエッジに引き伸ばされます。
だから私の解決策は次のとおりです:
フォルダーdrawable_splashscreen.xml
内にdrawables-v23
を作成します。これは、ベクトル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>
次に、別のdrawable_splashscreen.xml
を作成しますが、通常の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:src="@drawable/ic_splashscreen" Android:gravity="center"/>
</item>
</layer-list>
<bitmap>
要素に注目してください。そのため、PNGがAPI 23より前のデバイスで使用されると、適切に表示され、背景全体に拡大されません。残念ながら、古いAPIで機能させるには、スプラッシュスクリーンをPNGとして提供する必要があります。ただし、API 23+を搭載したすべてのデバイスでは、ベクトルドロウアブルが使用されます。
この問題が同じ問題を抱えている人に役立つことを願っています!
全画面スプラッシュを使用するには、次を使用してください。
Android:gravity="fill_horizontal|fill_vertical"
解決しない場合、解決策は解像度サイズごとに別々の画像を作成することです。
最も一般的な解像度:
ポートレート形式:
横長形式(反転縦長形式):
詳細については、こちらをご覧ください:
これは、デバイスがAPI 23未満の場合、ベクトルで実行できるとは思わない。なぜなら、ドロアブルの属性Android:heightとAndroid:widthを設定することができないからだ。
中央のアイコンでスプラッシュスクリーンを実装するには、ロゴのベクトルを各スクリーンサイズの.pngにエクスポートし、レイヤーリスト内にビットマップを埋め込む必要がありました。
<?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>
理想的には、リソースにビットマップイメージをまったく含めたくないのですが、ビットマップを使用する必要があるのは、少なくともスプラッシュスクリーンだけです。