メジャー単位の換算式
public class DensityUtil {
/**
* dp px( )
*/
public static int dip2px(Context context, float dpValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dpValue * scale + 0.5f);
}
/**
* px( ) dp
*/
public static int px2dip(Context context, float pxValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (pxValue / scale + 0.5f);
}
}
画面の高さと幅を取得する方法
DisplayMetrics metric = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metric);
int width = metric.widthPixels; // ( )
int height = metric.heightPixels; // ( )
float density = metric.density; // (0.75 / 1.0 / 1.5)
int densityDpi = metric.densityDpi; // DPI(120 / 160 / 240)
しかし、低密度の小さな画面の携帯電話では、上のコードだけでは正確なサイズを取得できないことに注意してください.例えば、240 x 320画素の低密度携帯電話では、上記のコードを実行すると、取得した画面サイズは320 x 427である.そこで,研究の結果,多解像度サポートが設定されていなければ,Androidシステムは240 x 320の低密度(120)サイズを中密度(160)対応のサイズに変換し,プログラムの符号化に大きく影響することが分かった.だから、エンジニアリングのAndroidManifestが必要です.xmlファイルに、supports-screensノードを追加します.具体的な内容は以下のとおりです:
詳細は以下を参照してください.http://www.cnblogs.com/renyuan/archive/2012/07/25/2607936.html
メトリック単位の換算式はandroidソースパッケージTypedValue.JAvaでは、以下の関数を見てみましょう.コードは以下の通りです:public static float applyDimension(int unit,float value,DisplayMetrics){switch(unit){case COMPLEX_UNIT_PX:returnvalue;case COMPLEX_UNIT_DIP:returnvalue*metrics.density;case COMPLEX_UNIT_UNIT_SP:returnvalue*metrics.scaleddensity;case COMPLEX_UNIT_PT:returnvalue*metrics;metrics*metrics.scaleddensity;case COMPLEX_UNIT_PT:returnvalue*metric*mets.xdpi*(1.0 f/72); case COMPLEX_UNIT_IN: return value * metrics.xdpi; case COMPLEX_UNIT_MM: return value * metrics.xdpi * (1.0f/25.4f); } return 0;}この関数機能は、各単位を画素に換算する機能です. metrics.density:デフォルトはDENSITY_DEVICE/(float) DENSITY_DEFAULT; metrics.scaleddensity:デフォルトはDENSITY_DEVICE/(float) DENSITY_DEFAULT; metrics.xdpi:デフォルトはDENSITY_DEVICE; DENSITY_DEVICE:スクリーン密度DENSITY_DEFAULT:デフォルトは160