문제

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;

출처 (@Romain Guy)

물론 픽셀에서,이 방법은 픽셀을 매개 변수로 요구하고 있습니다.

나에게 잘 작동하는 위의 답변을 기반으로, 나는 일부를 생성한다. 도우미 방법, 전체 프로젝트에서 사용하기 위해 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());
    }
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top