setwidth (int pixels)가 딥 또는 px를 사용합니까?
-
18-09-2019 - |
문제
setwidth (Int Pixels)는 장치 독립 픽셀 또는 물리 픽셀을 단위로 사용합니까? 예를 들어, setwidth (100)는 A view 너비를 100 딥 또는 100 PX로 설정합니까?
감사.
해결책
픽셀을 사용하지만 대신 딥을 사용하는 방법이 궁금합니다. 답이 있습니다 TypedValue.applyDimension()
. 다음은 코드에서 DIPS를 PX로 변환하는 방법의 예입니다.
// Converts 14 dip into its equivalent px
Resources r = getResources();
int px = Math.round(TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP, 14,r.getDisplayMetrics()));
다른 팁
코드에서 일정한 수의 딥을 얻는 올바른 방법은 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));
반환 한 플로트는 장치의 픽셀 밀도에 따라 스케일링되므로 애플리케이션 전체에서 변환 방법을 계속 복제 할 필요가 없습니다.
Method Setwidth (100), 100 px를 너비 (DP가 아님)로 설정하십시오. 따라서 다양한 안드로이드 폰에서 폭이 다양한 문제에 직면 할 수 있으므로 픽셀 대신 DP에서 측정을 사용할 수 있습니다. 아래 코드를 사용하여 샘플 너비의 DP에서 측정을 얻으십시오. = 300px 및 높이 = 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;
물론 픽셀에서,이 방법은 픽셀을 매개 변수로 요구하고 있습니다.
나에게 잘 작동하는 위의 답변을 기반으로, 나는 일부를 생성한다. 도우미 방법, 전체 프로젝트에서 사용하기 위해 Utils에 추가하십시오.
// 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());
}
제휴하지 않습니다 StackOverflow