EDIT:すべての回答とコメントをありがとう。それについて考えた後、質問の核心部分を「私のゲームが実行できる最小解像度/比率を決定し制限する方法」に言い換えます。 imoは、最小の画面/比率(詳細の欠如)でゲームをプレイできなくなるか、最小の画面/比率でさえサポートすると、他のすべてのユーザーのエクスペリエンスが大幅に低下します。それに加えて、最小解像度が何であるかさえ知らないか、ldpiを無効にする以外の方法でそれを制限することさえできます...これはまだ最小のmdpiを教えてくれません。結局のところ、私は良い結果を作成する方法についてではなく、完璧な結果を作成する方法について考えています;)。それは不可能だと思います(まだ?)。
注:これは、純粋にタブレットではなく携帯電話に関するものです。また、この質問は、Androidレイアウトシステム。
私はいつも、どの解像度が漠然と期待されるかの定義を見つけました。ドキュメントの list を知っています。
さて、私の最初の質問は、このリストが完全であるか、つまりメーカーが他の解像度やアスペクト比を使用できるかどうかです。私の現在のアプローチは、このリストをそのような外観のアスペクト比で表示することです(正確かどうかはわかりませんが、アイデアは得られます)。
したがって、さまざまなデバイスをカバーしたい場合は、最小と最大のアスペクト比が何であるかを把握し、自動的に最大に拡大しながら最小のレイアウトを設計します。たとえば、すべての密度をサポートする場合、4:3の画面を設計し、16:9に拡大します。 ldpiサポートを削除する場合は、3:2に設計します。もちろん、これはアスペクト比4:3のmdpiデバイスが存在しないことを前提としているため、最初の質問に戻ります。
私の推奨する解決策は、Androidマーケットでアプリケーションが処理できるアスペクト比を示すことですが、それは今のところ不可能と思われます。
誰かがより良いアプローチを持っていますか? (携帯電話でのゲーム専用であることに注意してください)
問題に対する明確な答えを見つけました。
3.0より前の最小解像度は未定義です。そのため、3.0以上では、最小解像度を選択し、それに基づいてゲームを設計し、superMなどで述べられているように、より大きな画面/比率でレイアウトを動的に拡大することができます。
さまざまな画面サイズに合わせてUIを設計すると、各設計に最小限のスペースしか必要ないことがわかります。したがって、上記の一般化された各画面サイズには、システムによって定義された最小解像度が関連付けられています。これらの最小サイズは「dp」単位(レイアウトを定義するときに使用する必要がある単位)であり、これによりシステムは画面密度の変化を心配する必要がなくなります。
- xlarge画面は少なくとも960dp x 720dpです
- 大画面は少なくとも640dp x 480dpです
- 通常の画面は少なくとも470dp x 320dpです
- 小さな画面は少なくとも426dp x 320dpです
注:これらの最小画面サイズは、Android 3.0、通常と大の間で誤分類されたデバイスに遭遇する可能性があります。これらは画面の物理解像度にも基づいているため、デバイス間で異なる場合があります。たとえば、1024x720タブレットシステムバーを使用すると、システムバーによって使用されるため、アプリケーションで使用できるスペースが実際には少し少なくなります。
あなたの質問に直接答えることはできませんが、私のアプローチをお話ししたいと思います。数字をまったく使わないようにしています。代わりに、パディング、マージン、相対的なレイアウトを使用して、どの電話でもビューが正しく見えるようにします。また、さまざまな向きのビューを作成しないようにするのにも役立ちます。
ここで多くの人が前述したように、私のアプローチでは、デバイスに依存しないコンポーネント(パディン、マージン、相対レイアウトなど)を、デバイスに依存しないパクセルと組み合わせて最大限に活用します。
率直に言って、私は私だけではないことを願っていますが、DIP(デバイス独立ピクセル)と相対的なレイアウトなどを最大限に活用しています...アクティビティレイアウトファイルを3種類の代わりにアクティビティごとに1つに減らしましたHDPI、MDPIおよびLDPI用。
アスペクト比が本当に心配な場合は、常にデバイスのピクセル単位で表示プロパティを呼び出し、それらの数値に基づいて適切なレイアウト計算を行うことができます。これは、最初のアクティビティのonCreateメソッドの最初に呼び出すことができます。
Display display = getWindowManager().getDefaultDisplay();
int displayWidth = display.getWidth();
int displayHeight = display.getHeight();
これにより、ハードウェアsiplayの幅と高さの値がピクセル単位で得られます。私の意見では、3種類以上のレイアウトタイプを選択する本当の理由は、画像の解像度が十分に鮮明であることを確認するためです。
これらの数値を使用して、特定のウィジェットにロードする解像度画像のタイプを計算する内部ロジックを作成できます。したがって、同じレイアウトを3回作成する手間が省けます。..
少しわかりにくいかもしれませんが、さまざまなデバイスの解像度を克服するための主なことは、
xMLレイアウトでDIPを定義することもできるため、すべてのコンポーネントはすべての種類のデバイスで同じように見えます。
たぶんばかげた例かもしれませんが、私にとってはうまくいきました:-)ここで、テキストビューのテキストサイズをすべてのデバイスで比較的同じにしようとしました。 「TypedValue」クラスを呼び出して、そこに提供されている多くのパブリック変数の1つから選択できます。 TextViewをどこでも同じ相対サイズにしたかったので、以下のコードを使用しました。
someTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 18);
数値は、DIPのサイズをどれだけ大きくするかを設定するためのものです。 TypedValueは、ディメンションプロパティにINT値を必要とする多くのウィジェットまたはアクティビティコンポーネントで使用できます。それで遊んでみれば、人生がずっと楽になることがわかります:-p
この答えが少し役立つことを願って
アスペクト比の完全なリストはありません。メーカーは、自分が感じる解像度を決定できます。さらに、アスペクト比はピクセル密度と一致しないため、ldpi/mdpi/hdpiを使用してアスペクト比を決定することは、おそらく良い考えではありません。
これに対処するための戦略は、実際にゲームに依存します。もちろんある程度までは、単にすべてを大きく/小さくする必要がありますが、明らかに難しい部分は、アスペクト比が異なるエッジです。特定のゲーム(ファーストパーソンシューティングゲーム、サイドスクローラー、タイルトップダウンゲームなど)では、特定のデバイスに利点を与えることに関心がない限り、あまり問題なく異なる視野を提供できます。また、背景に伸縮性またはタイル化可能なグラフィックを使用し、同じ効果的な(スケーリングされた)再生領域を維持することを検討することもできます。
尋ねることができます GameDev.stackexchange.com
これはあなたに似た問題です: 異なるresoulution携帯電話用のゲームを構築する
画面の解像度に基づいて、市場でゲームを表示できるデバイスを制限できます。 http://developer.Android.com/guide/appendix/market-filters.html
完全に掘り下げたわけではありませんが、残念ながらアスペクト比については言及されていないので、動作することがわかっているものをすべて記入する必要があるかもしれません。
それに失敗すると、グラフィックスの見栄えを良くするために必要な最小解像度を設定でき、ゲームを小さい比率に変更したくない場合は、コンソールゲームの場合と同じように黒い境界線を追加できます。ただし、モバイル画面のスペースは貴重なので、黒いバーでプレイエリアを切り刻む場合は、HUDを黒いエリアに移動して、できるだけ多くの画面を使用するようにします。
画面サイズのサポートに関する詳細はこちらにあります: http://developer.Android.com/guide/practices/screens_support.html
:D