2013-10-08 21 views
8

タブレットアプリケーション開発の新機能です。私は画面解像度(600 * 960ディップ)でGoogle Nexus7を使用していますので、mdipカテゴリに該当するかどうかを知りたいのですか? それによると1px = 1dp(ベースライン)。しかし、私がこれに従えば、タブレットでうまく見えません。 Nexus7の別のレイアウトフォルダを作成しています-sw600dpとmdipにしたがってサイズを記述しても動作しません。私のイメージも良く見えません。 google nexusの実際のコンバージョン率を知りたいGoogle Nexus 7のpxからdpへの変換

+1

使用それが役立ちます。このリンクします。http://www.xcubelabs.com/dpi/index.html –

答えて

13

式:pixels = dips * (density/160)

ネクサス7は、それの解像度コードは(あなたがdrawable-tvdpiというフォルダを持つことができることを意味する)tvdpiであることを意味213ピクセル密度、と800x1280です。あなたがして、利用可能な画面サイズ、マイナスウィンドウ装飾を測定することができます

私のN7で
this.getResources().getConfiguration().screenWidthDp; 
this.getResources().getConfiguration().screenHeightDp; 

、それは600のDPワット、888 DP hを返します。上記の式に従うと、888 dpの高さは1280pxです - 窓装飾。

+0

を助けてくれてありがとう。 50pxのレイアウトを定義したいのですが、等価なdpは 'dp =(50/213)* 160'でしょうか? – nilkash

+0

それは正しいです。これが助けられた場合は、問題を解決済みとしてマークしてください。ありがとう! –

3

Nexus7は、やや奇妙なdpi構造のユニークなデバイスです。ここではネクサス7

layout-large-hdpi 

については

は(ダイアンHackbornから - GoogleのAndroidのエンジニア)非常に良い説明です:Dianne Hackborn explains the unique resolution of the Nexus7

注:アプリは場合にのみ、これらのフォルダから画像を取りますより高い優先順位の修飾子を指定していません。たとえば、layout-sw360dpのようなレイアウトフォルダを指定した場合、アプリケーションは上記のような別個のレイアウトを指定しても、このフォルダの画像のみを取得します。アンドロイドにはレイアウトを与える必要があるため、優先順位があります。

画面密度一般DPI(インチあたりのドット数)と呼ば

。 Androidはすべての実際の画面密度を低(120)、中(160)、高(240)、超高(320)の4つの一般化された密度にグループ化します。 Galaxy Nexusなどのデバイスでは、画面密度が「超高」(具体的には、dpi値が320に設定されています)。 Nexus 7では「tvdpi」、つまり213 dpiが使用されます。

密度画素独立

は、一般に、DPと呼びます。これは、コンテンツを表示する際に使用される仮想ピクセル単位です。密度に依存しない画素は、160dpiのスクリーン上の1つの物理画素に相当する。

px = dp * (dpi/160) 

または同等:下記式DP使用を計算すること

dp = (px/dpi) * 160 

ネクサス7は、同様の解像度を有するにもかかわらず、ギャラクシーネクサスより多くのコンテンツを表示することができた理由はこれです:ネクサス7のDPI Galaxy Nexusよりも低いです。

ギャラクシーネクサス(720個のピクセル幅320 DPI)

(720/320) * 160 = 360 dp 

ネクサス7(800個のピクセル幅213 DPI)

(800/213) * 160 = 600 dp 

これはアプリはギャラクシーネクサス上でレンダリングされるときことを意味し、画面の幅は実際に360 dp(720ピクセルを使用してレンダリングされます)です。 Nexus 7では、画面の幅は600 dp(800ピクセルを使用してレンダリング)です。

+0

@GrlsHuご協力いただきありがとうございます。あなたのソリューションによれば、50pxのレイアウトを定義したいのであれば、同等のdpは 'dp =(50/213)* 160'でしょうか? – nilkash

+0

はい、右はdp計算になります。 – GrIsHu

1

以下のコードを試してください。ピクセル値を下にすると、結果がdpになります。

public int convertSizeToDeviceDependent(int value) { 
      DisplayMetrics dm = new DisplayMetrics(); 
      getWindowManager().getDefaultDisplay().getMetrics(dm); 
      return ((dm.densityDpi * value)/160); 
     } 
関連する問題