안드로이드 개발 질문/답변
(글 수 45,052)
안녕하세요..
제가 질문을 드리고자하는건 해상도별로 어플을 개발하려 할때 픽셀좌표를 쓰면 안된다고 검색해보니 그렇더라구요
px좌표가아닌 dip좌표로 제작해야 해상도별로 일정하게 된다던데...
제가 dip를 main.xml에서 버튼이나 view등의 위치는 dip로 하는것을 봤습니다...
하지만.. 소스상으로 이미지 같은것들이나 터치좌표 같은것들은 사실상 스크린좌표이거나 픽셀 좌표이잔아요...
그래서 검색해보니 픽셀좌표를 dip좌표로 변환하라고 하더라구요 안드로이드 개발자 사이트에 가서 공식을 보니
제가 질문을 드리고자하는건 해상도별로 어플을 개발하려 할때 픽셀좌표를 쓰면 안된다고 검색해보니 그렇더라구요
px좌표가아닌 dip좌표로 제작해야 해상도별로 일정하게 된다던데...
제가 dip를 main.xml에서 버튼이나 view등의 위치는 dip로 하는것을 봤습니다...
하지만.. 소스상으로 이미지 같은것들이나 터치좌표 같은것들은 사실상 스크린좌표이거나 픽셀 좌표이잔아요...
그래서 검색해보니 픽셀좌표를 dip좌표로 변환하라고 하더라구요 안드로이드 개발자 사이트에 가서 공식을 보니
pixels = dips * (density / 160) 이것이더라구요..
density값은 HVGA일경우는 160이고 WVGA일경우는 240이더라구요 그러면 픽셀 좌표를 dip좌표로 변환하려면
den = context.getResources().getDisplayMetrics().density(에뮬레이터 HVGA일경우에는 1,WVGA일경우에는 1.5가 찍히는것을 로그로 확인했습니다)
canvas.drawBitmap(imgback,50 * den,50 *den,null);
이렇게 하면.. 해상도별로 어느정도.. 비슷하게.. 위치하는 것 같기도한데... 정확하지는 않은것같습니다.. 이래저래 또 검색을 해본결과 리소스폴더인 hdlp,ldpi,mdpi 폴더별로 특징이 있더라구요 검색해본결과.. 맞게 검색했는지는 모르겠지만 hdpi로 이미지를 제작하면 해상도별로 자동축소(?)가 된다고 하는데... 테스트해본결과.. 축소가 되는것 같지만.. 약간(?)... 쫌 다르다는게 느껴집니다.
AndroidManifest.xml 안에
<supports-screens android:largeScreens="true"
android:normalScreens="true" android:smallScreens="true"
android:anyDensity="true" />
그리고 이렇게 Manifest에 옵션으로 넣어주면 해상도별 개발시에.. maifest파일에 이렇게 해주면 해상도별로 자동으로 잡는다는것 같은데.. 제대로 이해는 못하겠습니다.. 주저리.. 많이 그냥 나열만 한것 같네요..
제가 정말 궁금한것은.. 해상도별 이미지 좌표를 어떻게 넣어야 하는가.. dip으로 하게되면 세로는 가변적으로 작성해야한다고 하더라구요 가로는 320dip동일하지만 세로는 해상도 별로 다 다르기때문에.. 이미지좌표를 어떻게 구성하는것이 좋은지와 해상도별로 스크린좌표(터치좌표)등을 어떻게 잡아야 하는지 정말 궁금합니다. 고수님들의 명쾌한 답변 기다리겠습니다.
2010.08.12 18:58:12
진짜 간단하게 설명드리면요..
폰트같은 경우에는 모두 SP,
크기 넓이 같은경우에는 모두 DP 단위를 쓰면 거의 제대로 나옵니다.가변단위이기 때문에..
저같은 경우는 SP, DP 2가지 단위로 모두 적용했더니 제대로 나오더군요.
가로세로 비율까지 다른건 임베디드님 말씀대로 일일이 수작업 하지 않는 이상은 방법없는거 같네요.
그리고 스크린 좌표 같은 경우에도 상대좌표가 있을것 같은데요.
폰트같은 경우에는 모두 SP,
크기 넓이 같은경우에는 모두 DP 단위를 쓰면 거의 제대로 나옵니다.가변단위이기 때문에..
저같은 경우는 SP, DP 2가지 단위로 모두 적용했더니 제대로 나오더군요.
가로세로 비율까지 다른건 임베디드님 말씀대로 일일이 수작업 하지 않는 이상은 방법없는거 같네요.
그리고 스크린 좌표 같은 경우에도 상대좌표가 있을것 같은데요.
2010.08.13 02:04:59
터치 한 지점의 좌표같은 경우에는 특별히 신경 쓸 필요가 없을것 같은데요?
각 단말기마다 해상도나 비율이 달라도 변수를 선언해서 그때 그때 터치한 지점의 좌표를 넣으니, 별 다른 문제가 없을것 같고
말씀하신대로 좌표를 직접지정해서 위치를 잡으시는 경우에는 문제가 있는거 같은데,
어떤 작업을 하시는지 구체적으로 알지는 못하겠습니다만, relative layout같이 상대적인 레이아웃배치 같은걸 사용해보세요 ~
그리고 제가 알고 있기론 직접 좌표값을 입력해서 배치하는 AbsoluteLayout같은 경우에는 사용하지 않는것이 좋을듯 합니다..^^
다른 방법으로도 충분히 다 배치 가능합니다..
복사해서 붙여넣었음 ...
아니면 디폴트를 높이 800으로 하고, 밑에 붙어있는 뷰들의 높이를 + 54 ...
화면 마다 다르네요 ;;