Androidではdip、dp、sp、pt、px
3409 ワード
dip:device independent pixels(デバイス独立画素).デバイスによって異なる表示効果があり、これはデバイスハードウェアに関係しており、一般的にWVGA、HVGA、QVGAをサポートするために画素に依存せずに使用することを推奨しています.
dp:dipは同じです
px:pixels(画素).異なるデバイスの表示効果は同じです.
pt:pointは、標準的な長さ単位で、1 pt=1/72インチで、印刷業に用いられ、非常に簡単で使いやすい.
sp:scaled pixels(拡大画素).主にフォント表示best for textsizeに使用されます.
in(インチ):長さ単位.
mm(ミリ):長さの単位.
3、測定単位の換算式
androidソースパッケージでJAvaでは、次の関数を見ます.
この関数機能は、各単位を画素に換算する機能です.
metrics.density:デフォルトはDENSITY_DEVICE/(float) DENSITY_DEFAULT;
metrics.scaleddensity:デフォルトはDENSITY_DEVICE/(float) DENSITY_DEFAULT;
metrics.xdpi:デフォルトはDENSITY_DEVICE;
DENSITY_DEVICE:スクリーン密度
DENSITY_DEFAULT:デフォルトは160
1.dip:デバイス独立画素.デバイスによって異なる表示効果があり、これはデバイスハードウェアに関係し、一般的にWVGA、HVGA、QVGAをサポートし、画素に依存しないことを推奨しています.dipはスクリーン密度に関係し、スクリーン密度は具体的なハードウェアに関係し、ハードウェア設定が正しくなく、dipが正常に表示されない可能性があります.画面密度が160のディスプレイでは、1 dip=1 pxの場合、480*800のような画面解像度が大きい場合がありますが、画面密度が正しく設定されていません.例えば、160です.この場合、dipを使用すると異常が表示され、基本的には表示が小さすぎます.dipの換算:dip(value)=(int)(px(value)/1.5+0.5)2.dp:簡単でdipと同じです. 3. px:pixels(画素)、異なるデバイスの異なるディスプレイの表示効果は同じで、これは絶対画素で、いくらでも永遠に変わらない. 4. sp:scaled pixels(拡大画素).主にフォント表示best for textsizeに使用されます.Googleの推奨では、画素はdipを統一し、フォントはspを統一しています.例を挙げてpxとdipを区別する:pxは画素であり、pxを使うと実際の画素で描く.例えば、長さ240 pxの横線を描くと、480幅のシミュレータでは半分のスクリーン幅、320幅のシミュレータでは2/3のスクリーン幅となる.dipは、スクリーンの高さを480点、幅を320点に分ける.例えば、160 dipの横線を作ると、320でも480のシミュレータでも半分のスクリーンの長さになります.コードは次のとおりです.
dp:dipは同じです
px:pixels(画素).異なるデバイスの表示効果は同じです.
pt:pointは、標準的な長さ単位で、1 pt=1/72インチで、印刷業に用いられ、非常に簡単で使いやすい.
sp:scaled pixels(拡大画素).主にフォント表示best for textsizeに使用されます.
in(インチ):長さ単位.
mm(ミリ):長さの単位.
3、測定単位の換算式
androidソースパッケージでJAvaでは、次の関数を見ます.
public static float applyDimension(int unit, float value,DisplayMetrics metrics)
{
switch (unit) {
case COMPLEX_UNIT_PX:
return value;
case COMPLEX_UNIT_DIP:
return value * metrics.density;
case COMPLEX_UNIT_SP:
return value * metrics.scaledDensity;
case COMPLEX_UNIT_PT:
return value * metrics.xdpi * (1.0f/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
1.dip:デバイス独立画素.デバイスによって異なる表示効果があり、これはデバイスハードウェアに関係し、一般的にWVGA、HVGA、QVGAをサポートし、画素に依存しないことを推奨しています.dipはスクリーン密度に関係し、スクリーン密度は具体的なハードウェアに関係し、ハードウェア設定が正しくなく、dipが正常に表示されない可能性があります.画面密度が160のディスプレイでは、1 dip=1 pxの場合、480*800のような画面解像度が大きい場合がありますが、画面密度が正しく設定されていません.例えば、160です.この場合、dipを使用すると異常が表示され、基本的には表示が小さすぎます.dipの換算:dip(value)=(int)(px(value)/1.5+0.5)2.dp:簡単でdipと同じです. 3. px:pixels(画素)、異なるデバイスの異なるディスプレイの表示効果は同じで、これは絶対画素で、いくらでも永遠に変わらない. 4. sp:scaled pixels(拡大画素).主にフォント表示best for textsizeに使用されます.Googleの推奨では、画素はdipを統一し、フォントはspを統一しています.例を挙げてpxとdipを区別する:pxは画素であり、pxを使うと実際の画素で描く.例えば、長さ240 pxの横線を描くと、480幅のシミュレータでは半分のスクリーン幅、320幅のシミュレータでは2/3のスクリーン幅となる.dipは、スクリーンの高さを480点、幅を320点に分ける.例えば、160 dipの横線を作ると、320でも480のシミュレータでも半分のスクリーンの長さになります.コードは次のとおりです.
public static int dip2px(Context context, float dipValue)
{
final float scale = context.getResources().getDisplayMetrics().density;
return (int)(dipValue * scale + 0.5f);
}
public static int px2dip(Context context, float pxValue)
{
final float scale = context.getResources().getDisplayMetrics().density;
return (int)(pxValue / scale + 0.5f);
}
public void logScreenInfo() {
DisplayMetrics dm = new DisplayMetrics();
this.getWindowManager().getDefaultDisplay().getMetrics(dm);
int width = dm.widthPixels;
int height = dm.heightPixels;
float density = dm.density;
int densityDpi = dm.densityDpi;
float xDpi = dm.xdpi;
float yDpi = dm.ydpi;
float scaledDensity = dm.scaledDensity;
Log.d("info", "width = " + width);
Log.d("info", "height = " + height);
Log.d("info", "density = " + density);
Log.d("info", "densityDpi = " + densityDpi);
Log.d("info", "xDpi = " + xDpi);
Log.d("info", "yDpi = " + yDpi);
Log.d("info", "scaledDensity = " + scaledDensity);
}
:
D/info: width = 1920
D/info: height = 1032
D/info: density = 1.0
D/info: densityDpi = 160
D/info: xDpi = 213.0
D/info: yDpi = 213.0
D/info: scaledDensity = 1.0