막상 좀 만들어보려니.. 이 해상도가 참 성가시네요..
당장은 사용중인 폰에 맞도록 구현중이지만.. 실질적으로 해상도가 다르니 똑같이 나온다고 장담할순 없겠죠..
최대한 기기에 영향을 적게 받게 구현하려면 어떻게 해야 할까요..
일단 단위를 px을 쓰지 않고 dp를 쓰던데.. 솔직히 아직도 px과 dp의 차이를 정확히 모르겠구요.. 찾아 읽어봐도 햇갈립니다..
dp가 인치당 픽셀수로 밀도를 나타낸다는데.. 그렇다면.. 만약 화면의 크기가 다른.. 즉 픽셀수가 다른 기기에서
dp로 할 경우 그 비율을 그대로 유지한다는 뜻인가요??
그리고.. 개인적으로 레이아웃 배치기 리니어 레이아웃과 프레임 레이아웃을 가장 즐겨 사용하는데요..
리니어 레이아웃의 경우 weight보다도 그냥 margin이나 gravity 나 view를 추가하는식으로 여백을 표현합니다..
이때 필요한 여백 계산할때 제 기기가 480*800 이므로 가로의 경우 480을 기준으로 하여 들어가는 이미지 크기와 여백을 표현합니다..
예를 들어 이미지가 가로 400px이면 오른쪽 여백을 40px을 주는식으로요..
이걸 만약 px로 표현할시.. 해상도 다른 기기에서는 문제가 되나요??
그리고.. 다른 어플뜯어보다가 본건데.. 따로 xml을 만들어 픽셀을 모두 dp로 변환하여 사용하기에 저도 일단 그렇게 사용합니다만..
dp 사용시는 그 비율이 유지가 되는건지요..
이 비율이라는게 마추기가 참 힘드네요..
예를 들면.. 가운데 정렬을 gravity center를 주지 않고 세로 픽셀을 800으로 생각하여 위에 여백을 일정하게 주고 배치했을시..
당장 내 기기에서는 정상적으로 가운데 와 있는것처럼 보이지만.. dp로 하여도 화면이 큰 기기에서는 가운데 오는거 같지는 않습니다..
그럼.. 정말 해상도의 영향을 적게 받을려면.. 전부다 weight 로 비율 계산하여 배치하던지.. 아니면 쓰기 어려운 relative 레이아웃을 써야 된단 걸텐데..
보통.. 개발시 어떤 방법을 사용하시나요??
LinearLayout 에 child View 를 넣고 layout_weight 값으로 상대배치 하면 어느정도 잘 맞아 떨어집니다.
padding 값은 사용하지 않고 다 view 로 layout_weight 값으로 사용해야 하기 때문에
소스 양이 무진장 많아지고.. 노가다 코드도 많아서 힘들며.. View 가 그려지는것도 조금 느려질 수 있습니다.
좋은점이 생기면 안좋은 점도 생기는거죠..




저 역시 해상도 때문에 고민을 정말 많이 했습니다. 그리고 제가 추구하는것 또한 1소스 다해상도 인데요. 이것이 지금처럼 안드로이드폰이 많아 지기 전에는 가능했습니다만 이제는 너무나도 다른 해상도들때문에 힘들어지게 되었습니다. 여러 이유가 있겠지만, 주로 그림때문에 디자인을 해치게 되는 경우가 많았습니다. 글자, 버튼, 배치 등등은 모든것을 비율로 제작하시면 거의 해결이 됩니다. 그치만 그림의 경우 목표로 하는 해상도와 DPI에 맞게 그림을 받아 넣게 되는데요, 이게 비율이 달라져 버리면 이상하게 보여지는것을 피할수가 없습니다. 16:9의 비율로 동일하다면 비교적 통일성 있는 모습을 만들어 낼 수 있지만, 비율이 달라져 버리면 그림이 찌그러 지거나 하는 문제로 극복하기 어려문 면이 존재 했습니다. 그리고 비율로 어플을 제작하게 되면, 퍼포먼스를 중요시 하는 어플의 경우 퍼포먼스가 현격히 떨어집니다. 짧지만 로딩같은 문제가 발생합니다. 넘길수도 있는 부분입니다만, 퍼포먼스를 중시한다면 로딩은 큰 문제입니다.
DPI의 종류에 따라 다른 xml을 제작하는것도 있지만, 제가 해본 다해상도 대응중 가장 느렸습니다. DPI에 맞춰 제작하려면 같은 그림을 여러 비율과 DPI에 맞게 제작할수도 있지만, 역시 느리고 어플의 용량이 치솟는 결과를 낳았습니다.
말이 길었습니다만, 현재 제가 얻은 결론은 이렇습니다. 1소스 풀 해상도 대응은 이젠 불가능하다는것. 하지만 최대한 많이 지원하려면 비율계산으로 모든것을 작성하면 된다. 라는 것입니다. 지원되지 않는 것은 따로 APK제작이 현명한것 같습니다. 구글마켓도 여러 APK등록이 가능하다고 하니까요...
웬지 엄청난 양의 답글을 달아버렸네요.@_@;