2

7インチタブレット(800x480px)のdp計算に問題があります。以下は、私の計算方法です。計算または思考のどこで間違いを犯しているのかわかりません。

テストしているデバイスは3つあります。

  1. Nexus One:800x480px、3.7インチディスプレイ(仕様
  2. Huawei Ideos:320x240px、2.8 "ディスプレイ(仕様
  3. Ainol Novo 7 "タブレット:800x480px、7"ディスプレイ(仕様

ディスプレイサイズに基づいて、式に基づいてDPI(1インチあたりのドット数)を手動で計算しています。

sqrt(w^2 + h^2) / in

だから私は得ています:

  1. Nexus One:sqrt(800 * 800 + 480 * 480)/3.7 = 252.15dpi
  2. Huawei Ideos:sqrt(320 * 230 + 240 * 240)/2.8 = 142.86dpi
  3. Ainol Novo 7 "タブレット:sqrt(800 * 800 + 480 * 480)/ 7 = 133.28 dp

次に、画面メトリックのdpi値を出力し、それに基づいて、画面の幅と高さをdp(密度に依存しないピクセル)で出力します。そのための私のコードは次のとおりです。

    DisplayMetrics metrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(metrics);
    Log.d(TAG, "ScaledDensity: " + metrics.scaledDensity);
    Log.d(TAG, "Density DPI: " + metrics.densityDpi);

    int widthInPx = 800; // 320 or 800, depending on the respective device width I'm testing
    int widthInDp =(int)(widthInPx/metrics.scaledDensity);
    Log.d(TAG, "width in dp: " + widthInDp);

    int heightInPx = 480; // 240 or 480, depending on the respective device height I'm testing
    int heightInDp =(int)(heightInPx/metrics.scaledDensity);
    Log.d(TAG, "height in dp: " + heightInDp);

結果は次のとおりです。

  1. Nexus One:スケーリングされた密度:1.5、密度DPI:240、 dp単位の幅:533、dp単位の高さ:320
  2. Huawei Ideos:ScaledDensity:0.75、Density DPI:120、 dpでの幅:426、dpでの高さ:320
  3. Ainol Novo 7 "タブレット:ScaledDensity:1.0、Density DPI:160、 dpでの幅:800、dpでの高さ:480

アクティビティ内のJavaコードから取得する密度DPIは、計算されたdpi値とは異なり、Androidによって明らかに120、160、または240のいずれかの値に丸められます。これはごく普通のことです。今のところ問題ありません。

問題/質問1:

3番目のデバイスであるNovo7"タブレット:ScaledDensityは1.0と言われ、dpの幅はピクセル数と同じ800と言われています。しかし、それは現実ではありません。フルスクリーンアプリを作成するときそこにビューを配置すると、実際に画面に収まるのは533dp x 320dpのビューだけです。したがって、Nexus Oneと同じdp測定値です。ただし、Nexus OneのDPI値は高くなりますが、ピクセル数は同じです。それは可能ですか?

問題/質問2:

エミュレータ用のAVDを作成し、Novo 7 "タブレットとまったく同じ測定値を使用します。Javaコードのログ行には、実際のタブレットデバイスの場合と同じ値が表示されます。

  1. Ainol Novo 7 "タブレットエミュレーター:ScaledDensity:1.0、Density DPI:160、 dpでの幅:800、dpでの高さ:480

ただし、エミュレーターでは、580dp x 320 dpのビューを配置して、フルスクリーンアクティビティで完全に表示することができます。まったく同じ測定値を持つエミュレータと実際のデバイスの間で、幅dpがどのように異なる可能性がありますか?

ここに画像の説明を入力してください

問題/質問3:

http://developer.android.com/guide/practices/screens_support.htmlには、次のように書かれています。

さまざまなタイプのデザインの一部をターゲットにするのに役立ちます

デバイス、ここに典型的な画面幅のいくつかの数字があります:

..。

480dp:Streak(480x800 mdpi)のようなトゥイナータブレット。

600dp:7インチタブレット(600x1024 mdpi)。

..。

私のタブレットはこれらのカテゴリのいずれかに該当すると思いますが、幅は480でも600 dpでもありませんが、その中間にあります。私の場合、533dp(実際のデバイス)または580dp(エミュレーター)のいずれかです。

これが事実である場合、そのような「典型的な画面幅」の概要は、実際にはそうではないように見えますが、異なるベンダーのデバイスが標準のものの間に他のランダムな値を持つことができる場合、どのように役立ちますか?次に、dpを使用する利点がまったくないように見えるので、ピクセル値の操作に戻って作業することができます。

4

1 に答える 1

2

ああ、私は単に行を忘れていました

<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="11" />

私のマニフェストで。

android:minSdkVersion がないと、常に問題になります。Android 1.5 のレガシーの問題だと思います。

于 2012-02-02T12:26:45.873 に答える