スプラッシュに表示したいフルスクリーンPNGがあります。そこに一つだけのエラー、と私は(すべての描画可能なフォルダに入れてどのようなサイズが分からないldpi
、mdpi
、hdpi
、およびxhdpi
)。私のアプリケーションは、すべての携帯電話とタブレットで正常に動作するはずです。スプラッシュがすべての画面で適切に表示されるようにするには、どのサイズ(ピクセル単位)を作成する必要がありますか?
スプラッシュに表示したいフルスクリーンPNGがあります。そこに一つだけのエラー、と私は(すべての描画可能なフォルダに入れてどのようなサイズが分からないldpi
、mdpi
、hdpi
、およびxhdpi
)。私のアプリケーションは、すべての携帯電話とタブレットで正常に動作するはずです。スプラッシュがすべての画面で適切に表示されるようにするには、どのサイズ(ピクセル単位)を作成する必要がありますか?
回答:
この回答は2013年のものであり、時代遅れです。Android 3.2以降、画面密度のグループは6つになりました。この回答は、できるだけ早く更新されますが、ETAはありません。現時点でのすべての密度については、公式ドキュメントを参照してください(特定のピクセルサイズに関する情報を見つけるのはいつものように困難です)。
画面密度ごとに1つずつ、4つの画像を作成します。
Androidデベロッパーガイドの9パッチイメージの概要を読む
これにより、Androidはデバイスの画像密度に適したファイルを選択し、9パッチ規格に従って画像をストレッチします。
質問のデザイン関連の側面についてお答えします。私は開発者ではないので、提供されているソリューションの多くを実装するためのコードを提供することはできません。悲しいかな、私の意図は、初めてのAndroidアプリの開発を手伝ったときと同じように迷っているデザイナーを助けることです。
Androidを使用すると、企業はほぼすべてのサイズの携帯電話とテーブルを、ほぼすべての解像度で開発できます。そのため、固定画面解像度がないため、スプラッシュ画面の「適切な画像サイズ」はありません。これは、スプラッシュスクリーンを実装したい人にとって問題になります。
(余談ですが、スプラッシュスクリーンはユーザビリティ担当者の間でやや推奨されていません。ユーザーがタップしたアプリはユーザーがすでに知っており、スプラッシュスクリーンで画像をブランド化する必要はありません。 「広告」。ただし、ゲームなど、初期化時にかなりの読み込みが必要なアプリケーション(5秒以上)で使用する必要があります。これにより、ユーザーがアプリがクラッシュしたかどうかを疑問に思うことがなくなります。
そのため、市場に出回っている携帯電話には非常に多くの異なる画面解像度があるため、Googleはいくつかの代替案と気の利いたソリューションを実装しました。最初に知っておくべきことは、Androidがすべての画面を4つの異なる画面密度に分割することです。
これから知っておくべきこと(デザイナーの場合)は、Androidは基本的に、デバイスに応じて、表示する4つの画像から選択することです。したがって、基本的に4つの異なる画像をデザインする必要があります(ただし、ワイドスクリーン、ポートレート/ランドスケープモードなど、さまざまなフォーマット用にさらに多くの画像を開発できます)。
このことを念頭に置いて、これを知っておいてください。Androidで使用されるすべての単一解像度の画面を設計しない限り、画像は画面サイズに合わせて拡大されます。また、画像が基本的にグラデーションやぼかしでない限り、ストレッチすると望ましくない歪みが発生します。したがって、基本的に2つのオプションがあります。各画面サイズ/密度の組み合わせの画像を作成するか、4つの9パッチ画像を作成します。
最も難しい解決策は、解像度ごとに異なるスプラッシュ画面を設計することです。このページの最後にある表の解像度に従うことから始めることができます(さらにあります。例:960 x 720はここにリストされていません)。また、小さなテキストなど、画像に細部がある場合は、解像度ごとに複数の画面を設計する必要があります。たとえば、中程度の画面に表示されている480x800の画像は問題ないように見えるかもしれませんが、小さい画面(密度/ dpiが高い)では、ロゴが小さすぎたり、一部のテキストが読みにくくなる場合があります。
もう1つの解決策は、9パッチイメージを作成することです。これは基本的に画像の周囲の1ピクセルの透明な境界線であり、この境界線の上部と左側の領域に黒いピクセルを描くことにより、画像のどの部分を拡大できるかを定義できます。9パッチ画像がどのように機能するかについては詳しく説明しませんが、簡単に言うと、上部と左側の領域のマーキングに位置合わせされているピクセルが、画像をストレッチするために繰り返されるピクセルです。
したがって、ロゴのどちらかの側(上部の境界)に1ドット、その上下(左側の境界)に1ドットを配置できます。これらのマークされた行と列だけがストレッチするピクセルになります。
これは9パッチの画像で、102x102px(最終的なサイズは100x100、アプリ用)です。
次に、同じ画像を200%ズームします。
上下に1pxのマークがあり、どの行/列が展開されるかを示しています。
アプリ内のこの画像は100x100で次のようになります。
そして、これが460x140に拡張された場合、次のようになります。
考慮すべき最後の1つ。これらの画像は、モニター画面やほとんどの携帯電話では問題なく見えるかもしれませんが、デバイスの画像密度(dpi)が非常に高い場合、画像は小さすぎるように見えます。おそらく読みやすいですが、1920x1200の解像度のタブレットでは、画像は中央の非常に小さな正方形として表示されます。それで解決策は何ですか?それぞれが異なる密度セット用の4つの異なる9パッチランチャーイメージを設計します。縮小が発生しないようにするには、各密度カテゴリの共通解像度を最も低く設計する必要があります。9パッチはストレッチのみを考慮しているため、ここでは縮小は望ましくありません。縮小プロセスでは、小さなテキストやその他の要素が読みにくくなる可能性があります。
以下は、各密度カテゴリの最小で最も一般的な解像度のリストです。
したがって、上記の解像度で4つのスプラッシュスクリーンを設計し、画像を拡大し、キャンバスの周りに1pxの透明な境界線を置き、どの行/列を伸縮可能にするかをマークします。これらの画像は密度カテゴリのすべてのデバイスで使用されるため、ldpi画像(240 x 320)は、画像密度が小さい(約120 dpi)特大のタブレットでは1024x600に拡大される可能性があることに注意してください。したがって、スプラッシュスクリーンに写真や複雑なグラフィックスが必要ない限り、9パッチがストレッチの最適なソリューションです(デザインを作成するときにこれらの制限に注意してください)。
繰り返しになりますが、このストレッチが発生しない唯一の方法は、解像度ごとに1つの画面を設計することです(または、高/低密度のデバイスで画像が小さすぎる/大きくなりすぎないようにする場合は、解像度と密度の組み合わせごとに1つ)、または引き伸ばさずに背景色が表示される画像は、引き伸ばされた場所に表示されます(Androidエンジンによってレンダリングされた特定の色は、カラープロファイルのため、フォトショップによってレンダリングされた同じ特定の色とは異なる場合があります)。
これが理にかなっているといいのですが。幸運を!
MDPIは320x480 dp = 320x480px(1x)
LDPIは0.75 x MDPI = 240x360px
HDPIは1.5 x MDPI = 480x720px
XHDPIは2 x MDPI = 640x960px
XXHDPIは3 x MDPI = 960x1440px
XXXHDPIは4 x MDPI = 1280x1920px
MDPIは480x320 dp = 480x320px(1x)
LDPIは0.75 x MDPI = 360x240px
HDPIは1.5 x MDPI = 720x480px
XHDPIは2 x MDPI = 960x640px
XXHDPIは3 x MDPI = 1440x960px
XXXHDPIは4 x MDPI = 1920x1280px
編集:
2019年にこれを読んでいる場合は、スプラッシュスクリーンにLottieを使用することをお勧めします
ポートレート
LDPI:200x320px
MDPI:320x480ピクセル
HDPI:480x800px
XHDPI:720px1280px
風景
LDPI:320x200ピクセル
MDPI:480x320px
HDPI:800x480ピクセル
XHDPI:1280x720px
私は9パッチイメージを作成するための最良かつ最も簡単な答えを検索しました。9パッチイメージを作成するのが最も簡単な作業です。
https://romannurik.github.io/AndroidAssetStudio/index.htmlから、ワンクリックですべての解像度(XHDPI、HDPI、MDPI、LDPI)の9パッチイメージを作成できます。
PNGを使用するのはあまり良い考えではありません。実際には、パフォーマンスに関してはコストがかかります。Facebookの背景など、描画可能なXMLファイルを使用できます。
これにより、パフォーマンスをスムーズかつ高速化し、ロゴには.9パッチイメージを使用できます。
しばらく前に、サポートされている寸法でExcelファイルを作成しました
。これが誰かに役立つことを願っています
正直なところ、アイデアを失いましたが、別の画面機能をサイズ(密度だけでなく)と呼んでいます
https://developer.android.com/guide/practices/screens_support.html
間違いがある場合はお知らせください
私の場合、style.xmlでリストドローアブルを使用しました。描画可能なレイヤーリストを使用すると、すべての画面サイズに対して1つのPNGが必要になります。
<resources xmlns:tools="http://schemas.android.com/tools">
<!-- Base application theme. -->
<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
<item name="android:windowNoTitle">true</item>
<item name="android:windowBackground">@drawable/flash_screen</item>
<item name="android:windowTranslucentStatus" tools:ignore="NewApi">true</item>
</style>
ドローアブルフォルダーのflash_screen.xml。
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@android:color/white"></item>
<item>
<bitmap android:src="@drawable/background_noizi" android:gravity="center"></bitmap>
</item>
</layer-list>
「background_noizi」は、ドローアブルフォルダー内のpngファイルです。これがお役に立てば幸いです。
SplashScreenをAPI21からAPI23を含むすべてのAPIで見栄えよくする編集済みソリューション
APIs24 +のみをターゲットにしている場合は、次のようにxmlファイルで直接ベクトルドローアブルを縮小できます。
<vector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:aapt="http://schemas.android.com/aapt"
android:viewportWidth="640"
android:viewportHeight="640"
android:width="240dp"
android:height="240dp">
<path
android:pathData="M320.96 55.9L477.14 345L161.67 345L320.96 55.9Z"
android:strokeColor="#292929"
android:strokeWidth="24" />
</vector>
上記のコードでは、640x640のキャンバスに描画したドローアブルを240x240に再スケーリングしています。次に、スプラッシュスクリーンのドローアブルにそのように配置するだけで、うまく機能します。
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" android:opacity="opaque"
android:paddingBottom="20dp" android:paddingRight="20dp" android:paddingLeft="20dp" android:paddingTop="20dp">
<!-- The background color, preferably the same as your normal theme -->
<item>
<shape>
<size android:height="120dp" android:width="120dp"/>
<solid android:color="@android:color/white"/>
</shape>
</item>
<!-- Your product logo - 144dp color version of your app icon -->
<item
android:drawable="@drawable/logo_vect"
android:gravity="center">
</item>
</layer-list>
私のコードは実際には下の図の三角形のみを描画していますが、ここではこれで何ができるかがわかります。ビットマップを使用したときに得られたピクセル化されたエッジとは対照的に、最終的に解像度は素晴らしいです。そのため、ベクタードローアブルを必ず使用してください(専用のソフトウェアをダウンロードする手間をかけずに鉱山を作成するために使用していたvectrというサイトがあります)。
API21-22-23でも機能するように編集します
上記のソリューションはAPI24 +を実行するデバイスで機能しますが、API22を実行するデバイスにアプリをインストールした後、私は本当にがっかりしました。スプラッシュスクリーンが再びビュー全体を埋めようとしているように見え、たわごとのように見えました。私の眉毛を半日引き裂いた後、私はついに完全な意志力によって解決策を総当たりした。
スプラッシュスクリーンxml(例:splash_screen.xml)とまったく同じ名前の2番目のファイルを作成し、それをdrawable-v22およびdrawable-v21と呼ばれる2つのフォルダーに配置する必要があります。プロジェクトビューをAndroidからProjectに変更する必要があります)。これは、関連するデバイスがドローアブルフォルダーの-vXXサフィックスに対応するAPIを実行するたびに、これらのフォルダーに配置されたファイルにリダイレクトするように携帯電話に指示するのに役立ちます。このリンクを参照してください。これらのフォルダーに作成するsplash_screen.xmlファイルのLayer-listに次のコードを配置します。
<item>
<shape>
<size android:height="120dp" android:width="120dp"/>
<solid android:color="@android:color/white"/>
</shape>
</item>
<!-- Your product logo - 144dp color version of your app icon -->
<item android:gravity="center">
<bitmap android:gravity="center"
android:src="logo_vect"/>
</item>
これらのAPIのいくつかの理由により、ドローアブルを機能させるためにビットマップでラップし、最終的な結果を同じに見えるようにする必要があります。問題は、splash_screen.xmlファイルの2番目のバージョンにより、23を超えるAPIを実行しているデバイスでスプラッシュスクリーンがまったく表示されなくなるため、アプローチを追加のドローアブルフォルダーで使用する必要があることです。また、 androidのデフォルトとして、splash_screen.xmlの最初のバージョンをdrawable-v24に追加します。これは、リソース用に見つけることができる最も近いdrawable-vXXフォルダーにデフォルトで設定されます。お役に立てれば
Lucas Cerroからのこの回答に基づいて、回答のベースラインを使用して、Android docsの比率を使用して寸法を計算しました。これが他の誰かがこの投稿に役立つことを願っています!