dip / dp (Java 파일)를 사용하여 안드로이드 위젯의 레이아웃을 코딩해야합니다. 내가 코딩하면 런타임에
int pixel=this.getWindowManager().getDefaultDisplay().getWidth()
;
화면 너비를 픽셀 단위로 반환합니다 (px). 이것을 dp로 변환하려면 코딩했습니다.
int dp =pixel/(int)getResources().getDisplayMetrics().density ;
정답을 반환하지 않는 것 같습니다. 화면 해상도가 480 x 800 인 WVGA800의 에뮬레이터를 만들었습니다. 에뮬레이터를 실행하고 코드가 픽셀과 dp의 값을 인쇄하게하면 둘 다 320이되었습니다. 이 에뮬레이터는 240dpi이며 배율은 0.75입니다.
답변
이 시도
Display display = getWindowManager().getDefaultDisplay();
DisplayMetrics outMetrics = new DisplayMetrics ();
display.getMetrics(outMetrics);
float density = getResources().getDisplayMetrics().density;
float dpHeight = outMetrics.heightPixels / density;
float dpWidth = outMetrics.widthPixels / density;
또는
감사합니다 @ Tomáš Hubálek
DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
float dpHeight = displayMetrics.heightPixels / displayMetrics.density;
float dpWidth = displayMetrics.widthPixels / displayMetrics.density;
답변
Google 에서이 질문을 우연히 발견 한 후 나중에 API> = 13에 유효한 쉬운 솔루션을 찾았습니다.
향후 참조를 위해 :
Configuration configuration = yourActivity.getResources().getConfiguration();
int screenWidthDp = configuration.screenWidthDp; //The current width of the available screen space, in dp units, corresponding to screen width resource qualifier.
int smallestScreenWidthDp = configuration.smallestScreenWidthDp; //The smallest screen size an application will see in normal operation, corresponding to smallest screen width resource qualifier.
참조 구성 클래스 참조
편집 : Nick Baicoianu가 지적했듯이 화면 의 사용 가능한 너비 / 높이를 반환합니다 (대부분의 경우 흥미로운 것이어야 함). 실제 디스플레이 크기 가 필요한 경우 상단 답변에 충실하십시오.
답변
기본 밀도 값 160이 누락되었습니다.
2 px = 3 dip if dpi == 80(ldpi), 320x240 screen
1 px = 1 dip if dpi == 160(mdpi), 480x320 screen
3 px = 2 dip if dpi == 240(hdpi), 840x480 screen
즉, 세로 모드에서 너비가 160dip 인 레이아웃을 디자인하면 모든 ldpi / mdpi / hdpi 장치에서 화면의 절반이됩니다 (태블릿 제외).
답변
대신 이것을 사용하는 것은 어떻습니까?
final DisplayMetrics displayMetrics=getResources().getDisplayMetrics();
final float screenWidthInDp=displayMetrics.widthPixels/displayMetrics.density;
final float screenHeightInDp=displayMetrics.heightPixels/displayMetrics.density;
답변
DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
int width_px = Resources.getSystem().getDisplayMetrics().widthPixels;
int height_px =Resources.getSystem().getDisplayMetrics().heightPixels;
int pixeldpi = Resources.getSystem().getDisplayMetrics().densityDpi;
int width_dp = (width_px/pixeldpi)*160;
int height_dp = (height_px/pixeldpi)*160;
답변
kotlin의 답변 :
context?.let {
val displayMetrics = it.resources.displayMetrics
val dpHeight = displayMetrics.heightPixels / displayMetrics.density
val dpWidth = displayMetrics.widthPixels / displayMetrics.density
}
답변
Kotlin을 위해 단순화 :
val widthDp = resources.displayMetrics.run { widthPixels / density }
val heightDp = resources.displayMetrics.run { heightPixels / density }