setWidth (int pixels)는 장치 독립 픽셀 또는 물리적 픽셀을 단위로 사용합니까? 예를 들어, setWidth (100)는 뷰의 너비를 100 dips 또는 100 pxs로 설정합니까?
감사.
setWidth (int pixels)는 장치 독립 픽셀 또는 물리적 픽셀을 단위로 사용합니까? 예를 들어, setWidth (100)는 뷰의 너비를 100 dips 또는 100 pxs로 설정합니까?
감사.
답변:
픽셀을 사용하지만 대신 딥을 사용하는 방법이 궁금합니다. 대답은에 TypedValue.applyDimension()
있습니다. 다음은 코드에서 딥을 px로 변환하는 방법의 예입니다.
// Converts 14 dip into its equivalent px
Resources r = getResources();
int px = Math.round(TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP, 14,r.getDisplayMetrics()));
코드에서 일정한 수의 DIP를 얻는 올바른 방법은 다음과 같이 dp 값을 포함하는 리소스 XML 파일을 만드는 것입니다.
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="image_width">100dp</dimen>
<dimen name="image_height">75dp</dimen>
</resources>
그런 다음 다음과 같이 코드의 리소스를 참조하십시오.
float width = getResources().getDimension(R.dimen.image_width));
float height = getResources().getDimension(R.dimen.image_height));
반환 한 부동 소수점은 장치의 픽셀 밀도에 따라 크기가 조정되므로 응용 프로그램 전체에서 변환 방법을 계속 복제 할 필요가 없습니다.
메서드 setWidth (100), 100px를 width (dp가 아님)로 설정합니다. 따라서 다른 안드로이드 폰에서 너비가 다양한 문제에 직면 할 수 있으므로 픽셀 대신 dp로 측정을 사용하십시오. 아래 코드를 사용하여 샘플 너비의 dp로 측정하십시오. = 300px 및 height = 400px.
int width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 300, getResources().getDisplayMetrics());
int Height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 400, getResources().getDisplayMetrics());
float dps = 100;
float pxs = dps * getResources().getDisplayMetrics().density;
물론 픽셀은 픽셀을 매개 변수로 요구합니다.
나에게 잘 작동하는 위의 답변을 기반으로 몇 가지 도우미 메서드를 생성하고 유틸리티에 추가하여 전체 프로젝트에서 사용하십시오.
// value in DP
public static int getValueInDP(Context context, int value){
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value, context.getResources().getDisplayMetrics());
}
public static float getValueInDP(Context context, float value){
return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value, context.getResources().getDisplayMetrics());
}
// value in PX
public static int getValueInPixel(Context context, int value){
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, value, context.getResources().getDisplayMetrics());
}
public static float getValueInPixel(Context context, float value){
return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, value, context.getResources().getDisplayMetrics());
}