안드로이드 응용 프로그램의 화면 크기 획득 및 dp 및 px 값 변환

2720 단어
화면 크기 가져오기
WindowManager를 통해 가져오기

DisplayMetrics dm = new DisplayMetrics();

getWindowManager().getDefaultDisplay().getMetrics(dm);

//  display = getWindowManager().getDefaultDisplay()      DefaultDisplay  ;    display.getMetrics(dm)           DisplayMetrics dm

//  :WindowManager       context。getSystemService  :WindowManager wm = (WindowManager) context.getSystemService(context.WINDOW_SERVICE);


DisplayMetrics와 Display의 관계.
디스플레이는 디스플레이 영역이라는 대상을 가리킨다. 이것은 실제 물리 화면일 수도 있고 응용 프로그램의 디스플레이 영역만 가리킬 수도 있다. 예를 들어 전체 화면이 아닌 Activity에서 시스템은 상태 표시줄이 있기 때문에 디스플레이 영역이 물리 화면보다 작다.DisplayMetrics는 디스플레이 영역의 다양한 속성 값을 캡슐화합니다.소스 코드를 보면 DisplayMetrics에서 각 속성 값에 대한 주석이 실제 실제 실제 실제 크기로 설명되어 있습니다.그리고 디스플레이도 발견됐어요.getMetrics(dm) 함수는 실제 화면 크기를 가져올 때 기본적으로 적용됩니다.이 점을 기억하면 좋다.
참고: 구조 함수인 DisplayMetrics는 매개 변수를 전달할 필요가 없습니다.getWindowManager () 를 호출하면 기존 Activity의Handle을 가져옵니다.그리고 디플레이는 얻은 너비 비트를 디스플레이 메트릭 대상에 저장하고 얻은 너비 비트는 픽셀 단위(Pixel), 픽셀은'상대 픽셀'이 아닌'절대 픽셀'을 가리킨다.
DisplayMetrics 개체 dm를 통해 다음과 같은 정보를 얻을 수 있습니다.

width = dm.widthPixels;

height = dm.heightPixels;

xdpi = dm.xdpi;

ydpi = dm.ydpi;

density = dm.densityDpi;

fdensity = dm.density;


dp 및 px를 해당 px 수치의 인스턴스로 변환합니다.

int padding =4;

padding = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 4,

context.getResources().getDisplayMetrics());


설명:
padding의 단위는: dip, padding의 크기는: 4
4dip이지만 최종 패딩의 실제 단위는 아니다.
그는 계산을 통해 4dp와 밀도계수를 곱해서 얻은 값으로 실제로 계산된padding 단위는 픽셀, 즉 그 너비이다.dpi의 화면에 따라 이 값은 다르다.
즉: dp를 px로 전환하고 dp에 대응하는 px 수치를 되돌려줍니다.
여기가 콤플렉스라면...UNIX_SP, 즉 sp가 dp로 바뀐다는 뜻입니다.
단위 간의 전환은 이 방법으로 공구 방법으로 봉인할 수 있다.
진일보한 이해: apply Dimension 방법은 4 픽셀을 6dp(480x800), 4dp(320x800), 3dp(240x320)로 바꾸는 것이기 때문에 되돌아오는 값이 서로 다른 해상도(getDisplay Metrics를 통해 얻을 수 있음)는 6, 4, 3이다.
소스 코드:

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;

}

좋은 웹페이지 즐겨찾기