getDimension(), getDimensionPixelSize()와 getDimensionPixelOffset()의 차이

13041 단어

안드로이드 코드에서res 자원 가져오기dimens.xml파일에 정의된 치수 크기는 다음과 같은 세 가지 방법으로 지정할 수 있습니다.
       • getDimension
       •getDimensionPixelOffset
       •getDimensionPixelSize
리소스의 정의:
 
  
<dimen name="dp_20">20dpdimen>
<dimen name="sp_20">20spdimen>
<dimen name="dp_20_4">20.4dpdimen>
<dimen name="dp_20_5">20.5dpdimen>
<dimen name="px_20">20pxdimen>
<dimen name="px_20_4">20.4pxdimen>
<dimen name="px_20_5">20.5pxdimen>

테스트의 기본 코드는 다음과 같습니다. 내 실제 density는 3입니다.
Log.d(TAG,  "--------   dimens.xml    20dp   -------------");
Log.d(TAG, "getDimension:"+getResources().getDimension(R.dimen.dp_20) + "");
Log.d(TAG, "getDimensionPixelSize:"+getResources().getDimensionPixelSize(R.dimen.dp_20) + "");
Log.d(TAG, "getDimensionPixelOffset:"+getResources().getDimensionPixelOffset(R.dimen.dp_20) + "");
Log.d(TAG,  "--------   dimens.xml    20sp   -------------");
Log.d(TAG, "getDimension:"+getResources().getDimension(R.dimen.sp_20) + "");
Log.d(TAG, "getDimensionPixelOffset:"+getResources().getDimensionPixelOffset(R.dimen.sp_20) + "");
Log.d(TAG, "getDimensionPixelSize:"+getResources().getDimensionPixelSize(R.dimen.sp_20) + "");
Log.d(TAG,  "--------   dimens.xml    20.4dp   -------------");
Log.d(TAG, "getDimension:"+getResources().getDimension(R.dimen.dp_20_4) + "");
Log.d(TAG, "getDimensionPixelOffset:"+getResources().getDimensionPixelOffset(R.dimen.dp_20_4) + "");
Log.d(TAG, "getDimensionPixelSize:"+getResources().getDimensionPixelSize(R.dimen.dp_20_4) + "");
Log.d(TAG,  "--------   dimens.xml    20.5dp   -------------");
Log.d(TAG, "getDimension:"+getResources().getDimension(R.dimen.dp_20_5) + "");
Log.d(TAG, "getDimensionPixelOffset:"+getResources().getDimensionPixelOffset(R.dimen.dp_20_5) + "");
Log.d(TAG, "getDimensionPixelSize:"+getResources().getDimensionPixelSize(R.dimen.dp_20_5) + "");
Log.d(TAG,  "--------   dimens.xml    20.4px   -------------");
Log.d(TAG, "getDimension:"+getResources().getDimension(R.dimen.px_20_4) + "");
Log.d(TAG, "getDimensionPixelOffset:"+getResources().getDimensionPixelOffset(R.dimen.px_20_4) + "");
Log.d(TAG, "getDimensionPixelSize:"+getResources().getDimensionPixelSize(R.dimen.px_20_4) + "");
Log.d(TAG,  "--------   dimens.xml    20.5px   -------------");
Log.d(TAG, "getDimension:"+getResources().getDimension(R.dimen.px_20_5) + "");
Log.d(TAG, "getDimensionPixelOffset:"+getResources().getDimensionPixelOffset(R.dimen.px_20_5) + "");
Log.d(TAG, "getDimensionPixelSize:"+getResources().getDimensionPixelSize(R.dimen.px_20_5) + "");

인쇄 결과: 04-13 14:57: 42.047 D/MainActivity: ------- 획득한 dimens.xml의 값이 20dp인 경우 -----------
04-13 14:57:42.047  D/MainActivity: getDimension:60.0
04-13 14:57:42.047  D/MainActivity: getDimensionPixelSize:60
04-13 14:57:42.047  D/MainActivity: getDimensionPixelOffset:60
04-13 14:57: 42.047 D/MainActivity: ------- 획득한 dimens.xml의 값이 20sp인 경우 -----------
04-13 14:57:42.047  D/MainActivity: getDimension:60.0
04-13 14:57:42.047  D/MainActivity: getDimensionPixelOffset:60
04-13 14:57:42.047  D/MainActivity: getDimensionPixelSize:60
04-13 14:57: 42.047 D/MainActivity: ------- 획득한 dimens.xml의 값이 20.4dp인 경우 -----------
04-13 14:57:42.047  D/MainActivity: getDimension:61.19998
04-13 14:57:42.047  D/MainActivity: getDimensionPixelOffset:61
04-13 14:57:42.048  D/MainActivity: getDimensionPixelSize:61
04-13 14:57: 42.048 D/MainActivity: ------- 획득한 dimens.xml의 값이 20.5dp인 경우 -----------
04-13 14:57:42.048  D/MainActivity: getDimension:61.5
04-13 14:57:42.048  D/MainActivity: getDimensionPixelOffset:61
04-13 14:57:42.048  D/MainActivity: getDimensionPixelSize:62
04-13 14:57: 42.048 D/MainActivity: ------- 획득한 dimens.xml의 값이 20.4px인 경우 -----------
04-13 14:57:42.048  D/MainActivity: getDimension:20.399994
04-13 14:57:42.048  D/MainActivity: getDimensionPixelOffset:20
04-13 14:57:42.048  D/MainActivity: getDimensionPixelSize:20
04-13 14:57: 42.048 D/MainActivity: ------- 획득한 dimens.xml의 값이 20.5px인 경우 -----------
04-13 14:57:42.048  D/MainActivity: getDimension:20.5
04-13 14:57:42.048  D/MainActivity: getDimensionPixelOffset:20
04-13 14:57:42.048  D/MainActivity: getDimensionPixelSize:21
이상의 테스트 결과에 따라 결론을 얻습니다.
1.getDimension 반환값은float형이고 getDimensionPixelOffset, getDimensionPixelSize는 정형입니다.
2. 만약에 Resources에서dimen 속성 값의 단위가 dp 또는 sp라면 방법의 반환 값은 모두 속성 값*density이고 제4조의 다른 방법에 따라 (속성 값*density)에 대해 서로 다른 처리를 했다.
3..만약에 Resources에서dimen 속성 값의 단위가 px일 때 방법의 반환 값은 모두 다음과 같다. 속성 값은density를 곱하지 않고 4조의 다른 방법에 따라 속성 값을 서로 다르게 처리한다.
4. getDimension 반환 값은 정확한 값이고, getDimensionPixelOffset 반환 값은 작은 숫자를 직접 버리는 정수이며, getDimensionPixelSize는 반올림하는 정수이다.

좋은 웹페이지 즐겨찾기