Android dip,px,pt,sp의 차이점 상세 설명

3230 단어 dippxptsp
dip: device independent pixels (장치 독립 픽셀).서로 다른 장치는 서로 다른 디스플레이 효과를 가진다. 이것은 장치 하드웨어와 관련이 있다. 일반적으로 우리는 WVGA, HVGA, QVGA를 지원하기 위해 픽셀에 의존하지 않고 이것을 추천한다.px:pixels(픽셀).서로 다른 장치의 디스플레이 효과는 같다. 일반적으로 우리 HVGA는 320x480 픽셀을 대표하는데, 이것은 비교적 많이 사용된다.pt:point는 표준 길이 단위입니다. 1pt=1/72인치로 인쇄업에 사용되며 매우 간단하고 사용하기 쉽습니다.sp: scaled pixels (픽셀 확대).주로 글꼴에 best for textsize를 표시합니다.이에 따라 구글의 제안에 따라 TextView의
바이트는 sp를 단위로 하는 것이 가장 좋고 TextView의 원본 코드를 보면 Android가 기본적으로 sp를 바이트 단위로 사용한다는 것을 알 수 있다.
Android에서 1pt는 대략 2.22sp 이상으로 참고할 수 있으며, UI가 sp 단위로 디자인을 제공할 수 있다면 가장 좋고, 디자인에 sp의 개념이 없다면 개발자도 적당한 환산을 통해 근사치를 얻을 수 있다.
과거에 프로그래머는 일반적으로 픽셀 단위로 컴퓨터 사용자 인터페이스를 설계했다.예를 들어, 열 사이의 간격은 5픽셀이고 아이콘 크기는 16픽셀인 300픽셀 양식 필드를 정의합니다.×16픽셀 등.이렇게 처리하는 문제는 인치당 포인트 (dpi) 가 더 높은 새 모니터에서 프로그램을 실행하면 사용자 인터페이스가 매우 작아 보인다는 것이다.어떤 경우 사용자 인터페이스는 내용을 똑똑히 보기 어려울 정도로 작을 수도 있다.해상도와 무관한 도량 단위가 이 문제를 해결할 수 있다.Android는 다음 모든 단위를 지원합니다.px(픽셀): 화면의 점.in(인치): 길이 단위입니다.mm(mm): 길이 단위.pt(파운드): 1/72인치.dp(밀도와 무관한 픽셀): 화면 밀도를 바탕으로 하는 추상적인 단위입니다.160인치당 모니터에서 1dp = 1px.dip: dp와 같이android/ophone 예시에 많이 사용됩니다.sp(눈금과 무관한 픽셀): dp와 유사하지만 사용자의 글꼴 크기에 따라 크기를 조정할 수 있습니다.해상도: 전체 화면은 몇 점입니까? 예를 들어 800x480은 소프트웨어에 대한 디스플레이 단위이고 px를 단위로 하는 점입니다.density (밀도) 값은 인치당 몇 개의 디스플레이가 있는지를 나타내며 해상도와 두 가지 개념이다.apk의 자원 패키지에서 화면density=240시 hdpi 라벨을 사용하는 자원은 화면density=160시,mdpi 라벨을 사용하는 자원은 화면density=120시ldpi 라벨을 사용하는 자원입니다.일반android 설정 길이와 너비는 dip를 많이 사용하고 글꼴 크기는 sp를 많이 사용합니다. 화면 밀도는 160, 1dp=1px=1dip, 1pt=160/72 sp 1pt=1/72인치입니다.화면 밀도가 240일 때 1dp=1dip=1.5px.사용자 인터페이스가 현재와 미래의 디스플레이 유형에 정상적으로 표시될 수 있도록 항상 sp를 문자 크기의 단위로 사용하고 dip를 다른 요소의 단위로 사용하는 것을 권장합니다.물론 비트맵이 아닌 벡터 그래픽을 사용하는 것도 고려할 수 있다..

import android.content.Context;
import android.util.DisplayMetrics;
/**
* pixels = dips * (density / 160)
*
* @version 1.0.1 2010-12-11
*
* @author
*/
public class DensityUtil {
private static final String TAG = DensityUtil.class.getSimpleName();
// densityDpi
private static float dmDensityDpi = 0.0f;
private static DisplayMetrics dm;
private static float scale = 0.0f;
/**
  *
  *
  *
  * */
public DensityUtil(Context context) {
  //
  dm = new DisplayMetrics();
  dm = context.getApplicationContext().getResources().getDisplayMetrics();
  // DensityDpi
  setDmDensityDpi(dm.densityDpi);
  //
  scale = getDmDensityDpi() / 160;
  Logger.i(TAG, toString());
}
/**
  * density
  *
  * @param DmDensity
  * @retrun DmDensity Getter
  * */
public static float getDmDensityDpi() {
  return dmDensityDpi;
}
/**
  * density
  *
  * @param DmDensity
  * @retrun DmDensity Setter
  * */
public static void setDmDensityDpi(float dmDensityDpi) {
  DensityUtil.dmDensityDpi = dmDensityDpi;
}
/**
  *
  * */
public static int dip2px(float dipValue) {
  return (int) (dipValue * scale + 0.5f);
}
/**
  *
  * */
public int px2dip(float pxValue) {
  return (int) (pxValue / scale + 0.5f);
}
@Override
public String toString() {
  return " dmDensityDpi:" + dmDensityDpi;
}
}

좋은 웹페이지 즐겨찾기