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

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



답변

바로 코딩

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


답변

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

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


답변

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

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

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


답변

특정 DPI 값에 대한 픽셀을 계산할 수 있습니다. http://forum.xda-developers.com/showpost.php?p=6284958&postcount=31


답변

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

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

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


답변