안녕하세요 아즈라엘 입니다.
1개의 apk 파일로 모든 단말기의 해상도를 지원하는 어플을 만들때 어떻게 하시나요?
RelaytiveLayout + Dip 적용법이 제일 간단하긴 하지만 모든 해상도에 정확하게 맞는지는
모르겠습니다.
전 LinearLayout , FrameLayout + layout_weight 을 이용한 조합을 사용합니다~!
제가 하는 방법은 프로그램상 위치는 정확하게 맞아 떨어지는데 문제는 복잡한 xml 라인과
ViewGroup의 난발로 인해서 화면에 뜰때 조금 느려집니다. (아주 아주 아주 복잡할 경우)
또다른 방법은 이미지가 있는경우 background에 넣어서 사용할때 bitmap 으로 가져와서
비율에 맞게 리사이징 하여 다시 넣고 이걸 화면에 맞게 그리는 방법이 있는데
여러분은 어떻게 해서 1개의 프로그래밍으로 멀티 해상도를 지원하고 있습니까?
그리고 픽셀단위까지 잘 맞는지도 궁금하네요..

그냥 화면에 풀로 채우고
해당하는 기기의 크기에 맞게 알아서 되게 하는게 제일 좋은것 같아요
기본크기를 모든 폰에서 가장 많이 쓰는것으로 하게 되면
특정폰에서 약간 늘어나거나 하긴하는데
못봐줄 정도는 아니더라구요
2. 특정부분은 고정으로하고 가변이 가능한 부분만 가변할 수 있게하는것도 좋은 방법인것 같아요
ex)그림 수정 앱에서 버튼들은 고정크기이고 그림 부분만 크기가 폰 마다 다르게 되는거죠
가급적이면 Relative 로 다 마무리 합니다.
이녀석이 멀티디바이스에 동일한 UI 그려주긴 100배 편하더라고요. View Tree 도 많이 적어지고요
도돌님 좋은 팁 감사합니다~!
모바일이라 추천이 안되는데 데탑가면 추천 날립니다 ㅋ
전 기본적으로 relative를 쓰며, 탭부분이나 상단탭부분은 부분적으로 Linear를 쓰며, 이미지는 나인패치로 다 적용합니다.
가성비를 넘기고 가장 베스트한 방법은 대응 해상도에 맞는 이미지를 다 만드는 방법이지만, 현실성 없는 방법이므로 패쓰..
LinearLayout, weight, 9-patch, rightOf같은 속성 으로도 충분히 깔끔하고 이쁜 디자인을 구성하더군요...^^ㅋ
언제나 가장 큰 문제죠...해상도는...;;
안드로이드 장점중에 하나가
1개의 APK로 모든 해상도를 지원할 수 있다는 것이지요 ^^
도돌님 말씀처럼 모든 해상도 지원 가능하답니다.
옵티머스뷰처러 비율이 안 맞더라도요.
저도 Linear+weight 혹은 Frame 조합으로 주로 쓰는데,..(참고로 전 linear - fill_parent + weight=0 혹은 1 를 주로 사용합니다.)
주변에 보면 Relative 가 더 편하다고 생각하는 사람들도 꽤 많은 것 같습니다. 사람에 따라 자기가 더 편하다고 생각하는 것을 쓰면 될 듯...
dp 개념은 멀티해상도를 위해서 탄생한 거긴 한데... 솔직히 그렇게 만족스럽지는 않습니다.
왜냐하면,.. 해상도에 따라서 딱 맞는 크기로 나오지 않는 경우도 더러 있거니와
디자인측면에서 다른 해상도에서는 안예쁘다거나... 하는 경우가 꽤 있거든요.
그런데.. 달리 대안이 없으니.. ㅋ..
처음 입문할때 어려워서 가장 징징대는 부분인데 많이 해보면 할 수 있는 방법은 다 있지요.
무조건 해보고 딴사람 코드도 많이 보는 경험이 젤 중요한듯 합니다 ㅋ
1. 가장 많이 쓰는 것은 LinearLayout 에 weight 겠죠. weight 도 개념 잡기가 어려운데 (weight 잡고 있는 child 가 2개 이상이 되면 ㄷㄷㄷ) weightSum 라는 것을 알면 좀 더 편해집니다.
2. ScrollView 의 경우 fillViewport 라는 녀석이 또 중요합니다.
3. ImageView의 경우 scaleType 을 잘 지정하시면 bitmap 을 직접 뽑아 작업하셨던 문제를 해결 할 수 있지 않을까 합니다.
4. 백그라운드는 bitmap으로 하지 않고 (비율이 안맞으면 망하니) 9 patch 가 최고죠. weight, match_parent 와 함께 멀티 스크린 최고의 친구죠 ㅋ 컨텐츠 패딩까지 한꺼번에 지정 가능!
5. 복잡한 비트맵(특히 그라데이션) 배경을 꼭 쓰고 싶으면 이미지에 일부러 노이즈를 넣는 dithering 필터링 과정을 거처야 하기도 합니다. 어떤 기종에서는 안드로이드 내부에서 16bit 이미지 처리 밖게 안되서 화질 열화가 생깁니다.. (보통 옵티머스에서는 좋고 겔럭시에서는 계단 현상 작렬)
6. 대형 화면 + 그라데이션을 생각한다면 반드시 shape drawable 을 쓰셔야 합니다. shape drawable 을 쓰시면 '모든 기종'에서 5번에서 말한 이미지 열화가 없습니다.
7. 배경 뿐만 아니라 간단한 이미지는 xml 으로 만든 shape drawable을 쓰면 매우 좋습니다. layer 를 만들어 쓸수도 있어서 굿. 용량 작고 가볍고 xml으로 처리해서 변경도 매우 쉽구요. 직접 자바 코딩으로 drawable을 만드는것 까진 귀찮아서 못하겠습니다 -ㅠ- 구현에 한계도 많구요.
8. ViewGroup 에서의 알아야 할 놈은 LinearLayout, RelativeLayout, FrameLayout 친구들이죠. 애네만 잘쓰면 뭐든지 가능합니다. LinearLayout 의 nested 한 관계와 weight 남발시 성능이 걱정되는데 요즘은 폰이 좋아서요.,...... 전 재활용도 안하는 나쁜 개발자입니다. ㅠ 성능이 신경 쓰이는 부분엔 (ListView) RelativeLayout!
9. 모든 단위는 dip 단위를 쓰되 (텍스트 또한 주변 레이아웃 디자인과 같이 움직여서 sp를 쓰는 경우는 거의 없더라구요) 1px 라인 같은 것을 살리기 위해서 px 를 쓸 경우도 있습니다. 이런 라인도 대부분 9 patch 로 해결이 되지만요.
10. 잔머리를 굴려 위의 것을 모두 적용해도 해결할 방법이 없다면 Canvas 출동 해야죠. 배경을 타일로 깔때 이럴때도 부름니다. bitmap 을 리소스에서 직접 불러 써야 할땐 리소스를 drawable-nodip 에 넣어 두시면 기종별로 다르게(dip) bitmap 스케일이 나오는 것을 방지 할 수 있습니다.
지금 생각나는게 이 정도네요..
2.8인치 작은화면, 480 x 320, 랜드스케이프, 쿼티 HTC 차차 유저로써 겔럭시 전용이나 포트레이트 온리 앱을 보면 승질이 난담니다. ㅠㅠ
멀티 스크린 지원이 귀찮다면 본인 폰을 비주류 저사양 폰으로 바꿔 보세요.
마이너 기종의 슬픔을 공감하며 멀티 스크린 지원은 당연히 개발자가 해줘야지! 라는 마음이 마구 생깁니다.
가장 어려운 것이 멀티 스크린 용으로 처음부터 기획 되지 않은 화면이죠. 특히 아이폰 디자인 가지고 오면 환장 합니다. ㅋㅋ
첫 기획이나 디자인 단계 부터 멀티 스크린으로 생각하면 개발도 쉽습니다.
요즘 안드로이드 디자인 패턴도 워낙 잘나와서 따라만 해도 될꺼에요.