2013-10-08 3 views
8

타블렛 응용 프로그램 개발에 초보자입니다. 나는 화면 해상도 (600 * 960 딥)로 Google Nexus7을 사용하고 있습니다. 따라서 mdip 카테고리에 속하는지 알고 싶습니까? 에 따르면 1px = 1dp (기준선). 그러나 내가 이것을 따라하면 태블릿에서 잘 안 보인다. Nexus7 -sw600dp에 대한 별도의 레이아웃 폴더를 만들고 mdip에 따라 크기를 언급했지만 작동하지 않습니다. 내 이미지도 좋지 않습니다. Google 넥서스의 실제 전환율을 알고 싶습니다. 7. 도움이 필요합니다.Google Nexus 7의 px에서 dp 로의 변환

+1

사용이 도움이 될 것입니다 링크 : HTTP : //www.xcubelabs.com/dpi/index.html –

답변

13

공식 : pixels = dips * (density/160)

넥서스 7은 그것의 해상도 코드를 의미 213 픽셀 밀도와 800x1280이다가 (당신이 drawable-tvdpi라는 폴더를 가질 수 있습니다 의미) tvdpi이다.

당신과 함께, 마이너스 창 장식, 사용 가능한 화면 크기를 측정 할 수 있습니다 내 N7에

this.getResources().getConfiguration().screenWidthDp; 
this.getResources().getConfiguration().screenHeightDp; 

, 그것은 w 600 DP, 888 DP의 시간을 반환합니다. 위 공식에 따라 888 dp 높이는 1280px - 창 장식입니다.

+0

도움을 주셔서 감사합니다. 50px로 레이아웃을 정의하고 싶다면 dp = dp = (50/213) * 160'이 될 것입니다. – nilkash

+0

맞습니다. 도움이된다면 문제를 해결 된 것으로 표시하십시오. 감사! –

3

Nexus7은 다소 이상한 dpi 구조의 고유 한 장치입니다. Dianne Hackborn explains the unique resolution of the Nexus7

참고 : 응용이 폴더 경우에만 이미지를 소요 - 넥서스 7 여기

layout-large-hdpi 

를 들어

은 (구글 안드로이드 엔지니어 다이앤 Hackborn에서) 아주 좋은 설명이다 높은 우선 순위 한정자를 제공하지 않았습니다. 예를 들어 layout-sw360dp와 같은 레이아웃 폴더를 지정했다면 앱은 위에서 말한 것과 같은 별도의 레이아웃을 제공하더라도이 폴더의 이미지 만 사용합니다. 안드로이드에는 레이아웃을 제공해야하는 우선 순위가 있기 때문에.

화면 밀도는 일반적으로 dpi (인치당 도트 수) 함. Android는 모든 실제 화면 밀도를 낮음 (120), 중간 (160), 높음 (240) 및 특별 높이 (320)의 네 가지 일반화 된 밀도로 그룹화합니다. Galaxy Nexus와 같은 장치는 화면 밀도가 특별히 높습니다 (특히 dpi 값은 320으로 설정 됨). Nexus 7은 "tvdpi"즉 213dpi를 사용합니다.

밀도 독립적 픽셀

일반적 DP라고 함. 이것은 콘텐츠를 표시 할 때 사용되는 가상 픽셀 단위입니다. 밀도 비 독립 픽셀은 160 dpi 화면에서 하나의 물리적 픽셀과 동일합니다.

px = dp * (dpi/160) 

또는 동등 : 다음 공식 DP 사용을 계산하려면

dp = (px/dpi) * 160 

넥서스 7과 비슷한 해상도에도 불구하고 갤럭시 넥서스보다 더 많은 내용을 표시 할 수있는 이유는 이것이다 : 넥서스 7의 dpi의 Galaxy Nexus보다 낮습니다.

(800/213) * 160 = 600 dp 

이것은 앱 갤럭시 넥서스에 렌더링 될 때 것을 의미

갤럭시 넥서스 (720 픽셀 너비 320 dpi의)

(720/320) * 160 = 360 dp 

넥서스 7 (213 dpi로, 800 개 픽셀 폭) 화면의 너비는 실제로 360 dp (720 픽셀을 사용하여 렌더링 됨)입니다. Nexus 7에서는 화면의 너비가 600dp (800 픽셀 사용)입니다.

+0

@GrlsHu 도움 주셔서 감사합니다. 당신의 솔루션에 따르면 50px로 레이아웃을 정의하고 싶다면 동등한 dp는'dp = (50/213) * 160'입니까? – nilkash

+0

예, 그렇습니다. dp 계산이 가능합니다. – GrIsHu

1

아래 코드를 시도해보십시오. 아래 방법으로 픽셀 값을 지정하면 결과가 dp가됩니다.

public int convertSizeToDeviceDependent(int value) { 
      DisplayMetrics dm = new DisplayMetrics(); 
      getWindowManager().getDefaultDisplay().getMetrics(dm); 
      return ((dm.densityDpi * value)/160); 
     }