안드로이드는 수많은 기종이 있고 기종마다 지원되는 해상도가 다르다.
예를들어 Pixel 폰 해상도에서 marginTop 을 250dp 주었을때는 다음과 같다.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<ImageView
android:layout_width="150dp"
android:layout_height="150dp"
android:layout_marginTop="250dp"
android:layout_centerHorizontal="true"
android:src="@android:drawable/sym_def_app_icon"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
/>
</RelativeLayout>
activity_main.xml
android:layout_marginTop="250dp"
똑같이 marginTop을 "250dp" 주었지만 Pixcel 폰은 가운데에 위치한 반면 Nexus S 폰은 상대적으로 아래 위치하고 있다.
따라서 기종마다 사용자가 느끼는 경험이 달라지고 기종에 따라 UI가 짤리는 현상도 일어난다.
이러한 기종별 사이즈를 대응하는 방법 중 dimens를 활용하는 방법이 있다.
안드로이드의 리소스 폴더에 values-h720dp 를 생성한다.
해당 리소스 폴더에 들어가는 리소스 파일은 높이가 720dp 이상의 화면이 적용 대상이 된다.
해당 폴더 내에 dimens.xml을 아래와 같이 생성한다.
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools">
<dimen name="margin_top_iv_main">250dp</dimen>
</resources>
dimens.xml
안드로이드의 리소스 폴더에 values 폴더를 생성한 후(존재하지 않을 경우) 해당 폴더 내에도 dimens.xml을 아래와 같이 생성한다.
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools">
<dimen name="margin_top_iv_main">200dp</dimen>
</resources>
dimens.xml
이 후 activity_main의 margin 값을 아래와 같이 변경한다.
android:layout_marginTop="@dimen/margin_top_iv_main"
위와 같이 변경할 경우 720dp 이상의 화면(pixel)은 250dp가 미만의 화면은 200dp가 적용되게 된다.
개발자에 따라 다르겠지만 내가 사용하는 dimens는 다음과 같이 위치하고 있다.
values-h720dp → dimens.xml :
- 세로 기준 720dp 이상의 화면이 기준이 된다. 스크롤을 지원하지 않는 화면 사이즈 대응을 처리한다.
values-h640dp → dimens.xml :
- 세로 기준 640dp 이상의 화면이 기준이 된다. 스크롤을 지원하지 않는 화면 사이즈 대응을 처리한다.
values-h560dp → dimens.xml :
- 세로 기준 560dp 이상의 화면이 기준이 된다. 스크롤을 지원하지 않는 화면 사이즈 대응을 처리한다.
values-h480dp → dimens.xml :
- 세로 기준 480dp 이상의 화면이 기준이 된다. 스크롤을 지원하지 않는 화면 사이즈 대응을 처리한다.
values-w640dp → dimens.xml :
- 가로 기준 640dp 이상의 화면이 기준이 된다. 폰트로 인한 사이즈 대응을 처리한다.
values-w480dp → dimens.xml :
- 가로 기준 480dp 이상의 화면이 기준이 된다. 폰트로 인한 사이즈 대응을 처리한다.
values-w320dp → dimens.xml :
- 가로 기준 320dp 이상의 화면이 기준이 된다. 폰트로 인한 사이즈 대응을 처리한다.
values → dimens.xml : 기기의 사이즈와 관계 없이 고정된 사이즈의 값을 처리한다.
'Mobile App Development > Android' 카테고리의 다른 글
[ Android ] 안드로이드 무선 디버깅 (0) | 2024.04.25 |
---|---|
[ Android ] 안드로이드 APK 파일 추출 (0) | 2024.04.25 |
[ Android ] 로그캣 필터 쿼리 (0) | 2024.04.08 |
[ Android ] 안드로이드 버튼 동시 클릭 방지 (0) | 2024.04.08 |
[ Android ] 안드로이드 줄 바꿈 처리 (0) | 2024.04.08 |