Archives
Recent Posts
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
Today
Total
관리 메뉴

안드로이드 개발자의 창고

[51일차 Android] Density(해상도 대응) 본문

Computer/Android

[51일차 Android] Density(해상도 대응)

Wise-99 2023. 7. 19. 19:36

 

 

 

출처 : 안드로이드 앱스쿨 2기 윤재성 강사님 수업 PPT

 

 

 

📖 Density

  • 안드로이드는 단말기의 해상도에 따라 이미지를 선택할 수 있다.
  • 고해상도 단말기에서 선명한 이미지를 보여주는 목적으로 사용한다.
  • 같은 이미지를 해상도 별로 나눠 준비해놓으면 해상도에 맞는 이미지를 자동으로 사용해준다.
  • 관리가 힘들다는 단점이 있다.

 

 

 

해상도에 따른 분류

  dpi 배율
ldpi ~ 120 0.75
mdpi ~ 160
1.0
hdpi ~ 240 1.5
xhdpi ~ 320 2.0
xxhdpi ~ 480 3.0
xxxhdpi ~ 640 4.0

 

 

 

drawable 이미지 적용

  • 단말기 해상도에 해당하는 디렉토리에 이미지가 있을 경우 원본 크기 그대로 그린다.
  • 해상도에 해당하는 디렉토리에 이미지가 없을 경우 인접한 해상도 디렉토리의 이미지를 가져와 적당한 배율로 확대/축소해서 그린다.
  • 인접한 해상도 디렉토리에 이미지가 없을 경우 drawable 디렉토리의 이미지를 확대/축소해서 그린다.

 

 

 

mipmap 이미지 적용

  • 안드로이드는 런처 애플리케이션을 다른 것으로 교체할 수 있도록 지원하고 있다.
  • 런처를 개발한 개발자가 아이콘의 크기를 자유롭게 설정하여 만들 수 있다.
  • mipmap 폴더의 이미지는 바탕화면 런처에서 표시되는 아이콘의 크기에 따라 이미지가 선택된다.
  • 아이콘의 크기가 50dpi 면 mdpi 폴더의 이미지를 사용하고 100dpi면 xhdpi의 이미지가 선택된다.

 

 

 

예제 코드

이름이 같은 파일끼리 묶어 폴더로 만들어진다.

 

 

 

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity" >

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:srcCompat="@drawable/android1" />

    <ImageView
        android:id="@+id/imageView2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:srcCompat="@drawable/android2" />

    <ImageView
        android:id="@+id/imageView3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:srcCompat="@drawable/android3" />
</LinearLayout>

 

 

 

 

결과

왼쪽부터 차례대로 MDPI, HDPI, XXHDPI

  • 첫번째 이미지는 해상도에 맞춘 이미지가 없고 하나의 이미지만 존재한다. 그러므로 오른쪽으로 갈수록 확대하여 이미지를 나타내며 화질이 나빠지게 된다.
  • MDPI의 두번째와 세번째 이미지는 해상도에 맞는 이미지가 없으므로 HDPI의 이미지를 축소하여 나타낸다.
  • HDPI의 두번째와 세번째 이미지는 크기가 (203X200) 이므로 크기가 동일하게 나타난다.
  • XXHDPI의 두번째와 세번째 이미지는 크기가 각각 (203X200), (405X400)이므로 크기가 다르게 나타난다.