Android 의 상용 사이즈 단위(dp,sp)빠 른 입문 강좌

흔 한 사이즈 단위
Android 개발 에서 자주 사용 되 는 사이즈 단 위 는 다음 과 같은 몇 가지 가 있 습 니 다.
  • dp (dip)
  • px
  • pt
  • inch
  • sp
  • 정확 한 의 미 를 모 르 는 편 입 니 다.상기 몇 가지 사이즈 단위 에 대해 모두 가 낯 이 익 을 것 이 라 고 믿 습 니 다.여기 서 먼저 그들 을 다시 만 나 보 겠 습 니 다.
  • dp(dip):즉,장치 와 무관 한 픽 셀(device independent pixels)입 니 다.이 크기 단 위 는 장치 마다 물리 적 크기 가 같 습 니 다.
  • px:즉 픽 셀(pixel)입 니 다.이 건 더 말 할 필요 가 없습니다.
  • pt:보통 글꼴 의 크기 단위 로 사용 되 며,1 pt 는 1/72 인치 에 해당 합 니 다.
  • inch:인치,1 인 치 는 약 2.54 센티미터 로 주로 핸드폰 화면의 크기 를 묘사 합 니 다.
  • sp:대부분의 사람들 은 보통 글꼴 의 크기 단위 로 사용 되 는 것 만 알 고 실제 크기 는 구체 적 인 장치 의 사용자 설정 과 관련 이 있다.(만약 당신 이"sp"에 대한 이해 가 여기에 머 물 렀 다 면,이 글 을 본 후에 당신 은 그것 을 더욱 투철 하 게 이해 할 것 입 니 다^ ^)
  • 위의 몇 가지 흔히 볼 수 있 는 사이즈 단위 에서 dp 와 sp 는 가상 사이즈 라 고 볼 수 있다.그 중에서 dp 는 장치 와 무관 한 가상 픽 셀 단위 로 개발 자가 UI 컨트롤 에 dp 단위 의 크기 를 지정 하면 화면 밀도 가 다른 Android 장치 에서 같은 물리 적 사 이 즈 를 가 질 수 있 습 니 다.dp 의 등장 으로 개발 자 들 은 화면 밀도,물리 픽 셀 간 의 환산 관 계 를 주목 할 필요 가 없습니다.sp 는 dp 와 비슷 하지만 주로 글꼴 의 크기 단위 로 사 용 됩 니 다.dp 와 의 차 이 는 안 드 로 이 드 시스템 은 사용자 가 글꼴 크기 를 설정 하 는 것 을 지원 하기 때문에 sp 의 실제 크기 는 사용자 설정 에 따라 원래 의 크기 로 조정 합 니 다.
    다음은 dp 와 sp 두 가지 사이즈 단 위 를 상세 하 게 소개 합 니 다.
    사이즈 단위 상세 설명 dp
    dp 의 전 칭 은 device independent pixels 로 서로 다른 화면 밀 도 를 가 진 장치 에서 1dp 의 물리 적 크기 는 같다.그렇다면 화면 밀 도 는 무엇 일 까?
    화면 밀도
    휴대 전화의 화면 밀 도 는 일반적으로 휴대 전화 화면의 dpi(dots per inch),즉 인치 당 픽 셀 수 를 가리킨다.Android 휴대 전화 에서 흔히 볼 수 있 는 dpi 는 다음 과 같은 몇 가지 가 있 습 니 다.
  • ldpi:대응 하 는 dpi 범 위 는 0~120 입 니 다.즉,인치 당 0~120 픽 셀 의 화면 밀 도 는 모두 ldpi
  • 에 속 합 니 다.
  • mdpi:dpi 범 위 는 120~160
  • hdpi:dpi 범 위 는 160~240
  • xhdpi:dpi 범 위 는 240~320
  • xxhdpi:dpi 범 위 는 320~480
  • 실제 개발 에서 일반적으로 dpi 값 120,160,240,320,480 으로 각각 ldpi,mdpi,hdpi,xhdpi,xxhdpi 를 가리킨다.보통 화면 밀도 가 높 은 휴대 전화 에 표 시 된 그림 이 섬세 하 다.다음 코드 를 통 해 현재 Android 장치 의 화면 밀 도 를 가 져 올 수 있 습 니 다.
    
    private void getDpi() {
     DisplayMetrics dm = getResources().getDisplayMetrics();
     Log.i("TAG", "density = " + dm.density);
     Log.i("TAG", "densityDpi = " + dm.densityDpi);
    }
    만약 에 우리 가 화면 밀도 가 320 dpi 인 Android 핸드폰 에서 상기 코드 를 실행 하면 다음 과 같은 출력 을 얻 을 수 있 습 니 다.
    
    density = 2
    densityDpi = 320
    위 에서 출력 한 densityDpi 는 안 드 로 이 드 핸드폰 화면의 dpi 값 입 니 다.그러면 density 는 무엇 입 니까?실제 이것 은 현재 화면의 dpi 값 과 기준 dpi 값 의 비례 를 대표 하 는데 이 기준 dpi 값 은 160 이다.
    이제 dpi 를 이 해 했 으 니 dp 의 신비 한 베일 을 벗 겨 봅 시다.
    dp
    위 에서 dpi 값 160 을 기준 화면 밀도 로 선택 한 것 을 언급 했 습 니 다.이 기준 화면 밀 도 는 dp 와 px 간 의 관 계 를 만 들 었 습 니 다.dpi 가 160 인 Android 장치 에서 1dp=1px 입 니 다.x 가 특정한 UI 컨트롤 이 px 단위 의 크기 라 고 가정 하고 y 는 같은 UI 컨트롤 이 dp 단위 의 크기 이 며 densityDpi 는 화면 밀 도 를 나타 내 면 x 와 y 의 관 계 는 x=y*densityDpi/160 이다.
    dp 를 소 개 했 습 니 다.다음은 sp 라 는 사이즈 단위 의 정 체 를 탐구 해 보 겠 습 니 다.
    사이즈 단위
    sp 를 소개 하기 전에 Typed Value 류 에 포 함 된 한 사용자 가 dp,sp 등 단 위 를 px 로 전환 하 는 정적 방법 을 살 펴 보 겠 습 니 다.
    
     public static float applyDimension(int unit, float value,DisplayMetrics metrics) {
      switch (unit) {
      case COMPLEX_UNIT_PX:
       return value;
      case COMPLEX_UNIT_DIP:
       return value * metrics.density;
      case COMPLEX_UNIT_SP:
       return value * metrics.scaledDensity;
      case COMPLEX_UNIT_PT:
       return value * metrics.xdpi * (1.0f/72);
      case COMPLEX_UNIT_IN:
       return value * metrics.xdpi;
      case COMPLEX_UNIT_MM:
       return value * metrics.xdpi * (1.0f/25.4f);
      }
      return 0;
     }
    dp 를 px 로 변환 하려 면 다음 코드 를 실행 합 니 다.
    
    return value * metrics.density;
    density 는 앞에서 소개 한 적 이 있 습 니 다.현재 dpi 와 기준 dpi(160)의 비율 을 말 합 니 다.density 의 계산 방식 은 현재 화면의 dpi 를 160 으로 나 누 는 것 입 니 다.즉,화면의 dpi 가 120,160,320,480 일 때 density 의 값 은 각각 0.75,1,2,3 이다.
    sp 를 px 로 변환 하려 면 다음 코드 를 실행 합 니 다.
    
    return value * metrics.scaledDensity;
    sp 가 px 로 전환 되 는 계산 공식 이 dp 가 px 로 전환 되 었 을 때 와 비슷 하 다 는 것 을 알 수 있 습 니 다.그러면 scaled Density 는 무엇 입 니까?실제로 scaledDensity 는 density 와 달리 scaledDensity 는 동적 으로 바 꿀 수 있 으 며,사용자 가 Android 장치 의 글꼴 크기 조정 비율 을 바 꾸 면 scaledDensity 의 값 이 달라 집 니 다.scaledDensity 의 계산 공식 은 scaledDensity=density*fontScale 이다.이 중 fontScale 은 사용자 가 설정 한 Android 장치 의 글꼴 크기 를 나타 내 며 기본 값 은 1 입 니 다.사용자 가 안 드 로 이 드 장치 의 글꼴 크기 조정 비율 을 바 꾸 지 않 았 을 때 sp,dp 와 px 의 환산 은 같다 는 것 이다.
    다 해상도 상처
    시장 에 존재 하 는 다양한 해상도 의 안 드 로 이 드 설 비 는 많은 안 드 로 이 드 개발 자 들 에 게 많은 구 덩이 를 파 주 었 다.예 를 들 어:
  • 서로 다른 해상도 의 안 드 로 이 드 장 치 를 위해 dimens 파일 을 따로 유지 해 야 합 니 다.
  • 보통 UI 디자이너 는 특정한 해상 도 를 가 진 장치 에 만 UI 컨트롤 의 픽 셀 크기 를 표시 합 니 다.많은 파트너 들 이 서로 다른 해상도 장치 의 UI 컨트롤 픽 셀 크기 를 수 동 으로 환산 하 는 고통 을 충분히 받 았 다 고 믿 습 니 다.
  • 보통 우 리 는 각 해상도 의 안 드 로 이 드 장 치 를 위해 drawable 폴 더 를 유지 하여 비교적 좋 은 그림 표시 효 과 를 얻 을 필요 가 있 습 니 다.이것 은 apk 파일 크기 가 비대 해 질 수 있 습 니 다.또한 drawable 폴 더 의 그림 을 수정 하려 면 다른 drawable 폴 더 에 해당 하 는 그림 을 교체 해 야 합 니 다.만약 부주의 로 어떤 drawable 폴 더 아래 의 그림 을 빠 뜨 렸 다 면,이 그림 은 일부 해상도 의 휴대 전화 에서 일 그 러 질 수 있다.4567918)
    총결산
    이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.
  • 좋은 웹페이지 즐겨찾기