View.setPadding은 px에서만 허용합니다. 어쨌든 dp에서 setPadding이 있습니까?


92

Android 함수 View.setPadding(int left, int top, int right, int bottom)는 px 값만 허용하지만 dp로 패딩을 설정하고 싶습니다. 주위에 방법이 있습니까?

답변:


184

바로 코딩

    int padding_in_dp = 6;  // 6 dps
    final float scale = getResources().getDisplayMetrics().density;
    int padding_in_px = (int) (padding_in_dp * scale + 0.5f);

1
안녕하세요, 질문이 있습니다. 이 수식은 패딩이나 다른 용도로만 사용됩니까? 예를 들어 직사각형의 여백 또는 치수?
emeraldhieu

4
이것은 dp 단위를 픽셀 단위로 변환 하는 공식입니다 . 당신은 어디서든 사용할 수 있습니다
Labeeb의 Panampullan

2
getResources()활동에 의해 상속되는 함수 라고 가정 하지만 사용자 지정 목록보기 어댑터에서 이러한 줄을 사용하려고합니다. 전화 할 수없는 경우이 작업을 수행 할 수있는 방법이 getResources()있습니까?
Mike Baxter

1
어댑터에서 getContext (). getResources (). getDisplayMetrics (). density;
Steve G.

4
"+ 0.5f"에 대한 설명이 있습니까?
Xavier L.

96

XML 파일 (최소한 대부분의 경우 더 낫다)에서 차원 (dp 등)을 정의하면 다음 코드를 사용하여 픽셀 값을 얻을 수 있습니다.

context.getResources().getDimensionPixelSize(R.dimen.your_dimension_name)

2

프로그래밍 방식으로 값을 dp로 변환하는 더 좋은 방법이 있습니다.

int value = 200;
int dpValue = (int) TypedValue.applyDimension(
            TypedValue.COMPLEX_UNIT_DIP,
            value,        
            context.getResources().getDisplayMetrics());

그런 다음 dpValue방법에 적용 하십시오. 예를 들면 다음과 같습니다.setPadding(dpValue,dpValue,dpValue,dpValue);



0

나도 같은 문제가 있습니다. 내가 찾은 유일한 해결책은 (실제로 도움이되지 않습니다 :)) Xml 파일에 설정하는 것입니다.

코드에서 밀도를 얻을 수있는 경우 "딥 단위를 화면 픽셀로 변환하는 것은 간단합니다. 픽셀 = 딥 * (밀도 / 160)"이라는 변환을 사용할 수 있습니다. ( http://developer.android.com/guide/practices/screens_support.html에서 )

편집 : 화면 밀도를 얻을 수 있습니다 : http://developer.android.com/reference/android/util/DisplayMetrics.html#densityDpi

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.