9

私はAndroidアプリを完成させています。残っているのは、UIレイアウトとグラフィックを複数のデバイスに適合させることだけです。画面上の特定の位置に特定の要素を配置する必要があります。

Androidドキュメントでは、複数の画面の解像度とサイズがどのように分類されるか、およびリソースのタグ付けシステムについて説明しています。

たとえば、WVGA800 (480x800)WVGA854 (480x854)は両方とも通常の高密度スクリーンとして分類されます。これらに対応するために、「layout」(「normal」用にすでに存在)および「drawable-hdpi」というフォルダーを作成するように求められます。

問題は、「dp」ユニットを使用している場合でも、同じ分類の2つのデバイスを区別するために何も行わないことです。WGA800とWGA854のレイアウト/描画可能オブジェクトを個別に提供するにはどうすればよいですか?

比率は十分に異なるため、ユーザーはスケーリングの誤りに簡単に気付くことができます。これは、スコアやタイマーなどを背景画像に対して特定の場所に表示する必要があるために悪化します。

同じ問題が、{WQVGA400(240x400)、WQVGA432(240x432)}と{WVGA800(480x800)、WVGA854(480x854)}のペアにも当てはまります。WQVA400およびWQGA432のレイアウト/描画可能ファイルをどのように提供できますか?

4

3 に答える 3

15

あなたは地獄への道を進んでいると思います。

Androidは非常に多様なデバイスで実行され、毎週さらに多くのフォーマットが実行されます。多くのフォーマットはまだ存在していませんが、新しい変数が導入されます。したがって、成功したとしても、画面サイズがわずかに異なる1つの新しいデバイスを使用すると、アプリは失敗します。

特定の画面解像度を使用してAndroid向けに設計するのは間違いであり、ウェブ上ですべてのページを完全に同じサイズにした場合に見られる問題と同様に、うまく機能することはめったにありません(たとえば、整頓された固定幅のサイトでも)モバイルデバイスでは惨めに失敗します)。

Androidはこのすべてのバリエーションをサポートするように設計されていますが、すべての画面サイズでピクセルパーフェクトな絶対位置レンダリングを取得しようとすると、流れに逆らって泳ぎます。それは非常に苦痛で、非常に時間と費用がかかり、最終的には失敗する可能性があります。成功したとしても、これらすべての画面バリアントで一体どのようにテストしますか?地獄をテストしているようにも聞こえます。

必要なすべてを正確に行うことはできないことを受け入れることを強くお勧めします。代わりに、オブジェクトを相互に関連して流動的にレンダリングする方法を検討します。これにより、アプリは、さまざまなレイアウトを使用して、さまざまなバリエーションすべてで見栄えがします。さまざまなサイズの画面でのエクスペリエンスを向上させるための解像度の各グループ。

于 2011-03-25T12:40:37.873 に答える
5

はい、それは可能です:

まず、display-classのインスタンスを作成する必要があります。その後、ディスプレイの幅と高さを取得します。次に、if演算子を使用してループ内の各解像度を確認し、必要な画像を設定できます。

例:

ImageView iview=(ImageView)findViewById(R.id.imageView1);
//here are the Bitmaps optimized for each screen resolution 
Bitmap[] bitmaps={BitmapFactory.decodeResource(getResources(), R.drawable.icwvga800),BitmapFactory.decodeResource(getResources(), R.drawable.icwvga854),(...)};
// In this list all supported screensizes are defined
int[][] possibleScreenSolutions={{480,800},{480,854},{240,400},{240,432},{480,800},{480,854}};
Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
int[] ScreenSolution={display.getWidth(),display.getHeight()};
// Compare the real screen solution with the all supported ones
for(int i=0;i<possibleScreenSolutions.length;i++){
    if((ScreenSolution[0]==possibleScreenSolutions[i][0])&&(ScreenSolution[1]==possibleScreenSolutions[i][1])){
            iview.setImageBitmap(bitmaps[i]);// set the image
    }
}

私はOllieCに同意します:すべての解像度をチェックするのは混乱しすぎますが、少なくとも可能です。

私はすでにそれをテストしました:それは動作します。

于 2012-03-16T10:59:33.803 に答える
2

このページの他の場所での回答/コメントに加えて、紹介できる画面リソースの種類に注目して、自分の質問に対する別の回答を投稿したいと思います。これがAndroidドキュメントで明確にされているとは思いませんが、ドローアブルに関する限り、dpiタグの上にドローアブルファイルに画面サイズタグを追加できます。

たとえば、というフォルダを追加することdrawable-large-mdpiは有効であり、大画面で中解像度のデバイスは、可能であればここからリソースを取得します。ただし、タグの順序を切り替えることは重要です。宣言drawable-mdpi-largeはエラーです。

于 2011-04-01T02:45:20.490 に答える