안드로이드 응용 프로그램의 화면 크기 획득 및 dp 및 px 값 변환
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;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.