2012-06-24 5 views
1

내 Android 앱은 480x800 픽셀 해상도에서 훌륭하게 보이지만 240x400 픽셀로 LDPI 화면에서 깨집니다. 나는 화면 해상도에 따라 정확히 float 값을 줄 수있는 getResources().getDisplayMetrics().density을 사용하여 활동에서 화면의 비율 조정 요소를 얻을 수 있다는 것을 알고 있습니다. , 는 어떻게 설정할 수 있습니다이 방법은 왼쪽 상단, 하단과 오른쪽 값을 int에 픽셀을 사용으로DPI 배율 인수 (float)를 사용하여 여백을 설정하는 방법

내 응용 프로그램에서

, 나는 그 안에서 RelativeLayoutImageView의를 사용하고, setMargins()를 사용하여 이미지의 여백을 설정 한 이 값들은 DPI 요소를 사용하여 얻었습니까? (float)입니다. 우리는 Math.floor()을 가지고 있습니다. 그러나 픽셀을 사용하여 매우 특정한 위치에 이미지를 위치 시켰고, DPI 인자는 메소드에 의해 반환 된 값을 무시할 수없는 소수점에서 매우 구체적인 값을 가지고 있습니다. 따라서 캐스팅은 int으로 작동하지 않습니다.

은 또한, 나는 여백을 설정 lp.setMargins(100,200,0,0);를 사용하여 업데이트, 나는 장치에서 받았습니다 DPI 계수를 사용하도록에 어떤 수정을 만드는거야?

P. 나는 프로그래밍보다는 수학 문제를 더 많이 안다. 그러나 나는 수학에 가난하다. 미안하다.

답변

7

나는 너무 조그만 질문을하는 대신 자신 만만하게 묻는 것 같지 않지만 내가이 문제에 처음으로 직면 한 것은 아님을 알았다.

그래서 여기에 해결책이 있습니다.

내 Activity 클래스에 다음과 같은 메서드를 만들었습니다.

private int px(float dips) 
{ 
    float DP = getResources().getDisplayMetrics().density; 
    return Math.round(dips * DP); 
} 

이것은 주어진 dp 값을 적절한 픽셀로 변환합니다. 메서드에서 사용되는 변수 DP을 전역 변수로 만들고 px()이 아닌 onCreate() 메서드에서 초기화하여 메서드를 빠르게 실행하도록 만들 수 있습니다.

사용법 :

lp.setMargins(px(100),px(200), 0, 0); 

또는, 당신은 단지 이것에 대한 px()를 만들고 세계로 DP이없는 경우.

lp.setMargins(100 * Math.round(DP), 200 * Math.round(DP), 0, 0); 

그러나 방법을 사용하면 훨씬 깨끗하고 읽기 쉽게 보입니다. :-)

관련 문제