소스 코드의 res / values ​​/ dimension.xml에서 차원 값로드 얻을 수있는 값은 화면 밀도 계수

값을 그대로로드하고 싶습니다. 나는이 개있는 dimension.xml파일 하나 /res/values/dimension.xml와의 다른 하나를 /res/values-sw360dp/dimension.xml.

소스 코드에서 다음과 같은 작업을 수행하고 싶습니다.

getResources().getDimension(R.dimen.tutorial_cross_marginTop);

이것은 작동하지만 얻을 수있는 값은 화면 밀도 계수 (hdpi의 경우 1.5, xhdpi의 경우 2.0 등)를 곱한 값입니다.

나는 또한 시도했다

getResources().getString(R.dimen.tutorial_cross_marginTop);

이것은 원칙적으로 작동하지만 “dip”로 끝나는 문자열을 얻습니다 …



답변

내 dimens.xml에는

<dimen name="test">48dp</dimen>

코드에서 내가하는 경우

int valueInPixels = (int) getResources().getDimension(R.dimen.test)

이것은 문서 상태에 현재 전화 밀도 (제 경우 48dp x 1.5)를 곱한 72를 반환합니다.

문서 상태 그대로 :

특정 자원 ID의 차원을 검색하십시오. 단위 변환은 리소스와 관련된 현재 DisplayMetrics를 기반으로합니다.

따라서 XML에서와 같이 정확한 dp 값을 원하면 DisplayMetrics 밀도로 나누십시오.

int dp = (int) (getResources().getDimension(R.dimen.test) / getResources().getDisplayMetrics().density)

dp는 48이됩니다


답변

Context.getResources().getDimension(int id);


답변

Resource클래스에는 getDimensionPixelSize () 메소드도 있습니다 .


답변

int리소스에 가치 를 저장해야하는 사람들을 위해 다음을 수행 할 수 있습니다.

integers.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <integer name="default_value">100</integer>
</resources> 

암호

int defaultValue = getResources().getInteger(R.integer.default_value);


답변

getDimension 대신 getDimensionPixelOffset ()을 사용할 수 있으므로 int로 캐스트 할 필요가 없습니다.

int valueInPixels = getResources().getDimensionPixelOffset(R.dimen.test)


답변

xml 파일에도 정수를 쓸 수 있습니다.
[this]
http://developer.android.com/guide/topics/resources/more-resources.html#Integer ? 로 사용 .

 context.getResources().getInteger(R.integer.height_pop);


답변

    This works but the value I get is multiplied times the screen density factor
  (1.5 for hdpi, 2.0 for xhdpi, etc).

나는 해상도에 따라 가치를 얻는 것이 좋다고 생각하지만 이것을 원하지 않는다면 이것을 px로 제공하십시오 ….

밀도 독립적 픽셀 (dp)

UI 레이아웃을 정의 할 때 레이아웃 크기를 나타내거나 밀도 독립적 인 방식으로 위치를 지정하는 데 사용해야하는 가상 픽셀 단위입니다. 밀도 독립적 인 픽셀은 160dpi 화면에서 하나의 물리적 픽셀과 같습니다. 이는 “중간”밀도 화면에 대해 시스템에서 가정 한 기준 밀도입니다. 런타임시 시스템은 필요에 따라 dp 단위의 모든 스케일링을 투명하게 처리 based on the actual density of the screen in use. The conversion of dp units to screen pixels is simple: px = dp * (dpi / 160). For example, on a 240 dpi screen, 1 dp equals 1.5 physical pixels.합니다. 응용 프로그램의 UI를 정의 할 때 항상 dp 단위를 사용하여 밀도가 다른 화면에 UI를 올바르게 표시해야합니다.

나는 해상도에 따라 값을 변경하는 것이 좋다고 생각하지만 이것을 원하지 않으면 이것을 px로 제공하십시오 ….

링크를 참조하십시오

이것에 따라

dp

밀도 독립적 픽셀-화면의 물리적 밀도를 기반으로하는 추상 단위입니다. 이 단위는 160dpi (dots per inch) 화면과 관련이 있으며 1dp는 대략 1px입니다.When running on a higher density screen, the number of pixels used to draw 1dp is scaled up by a factor appropriate for the screen's dpi. Likewise, when on a lower density screen, the number of pixels used for 1dp is scaled down.dp 대 픽셀의 비율은 화면 밀도에 따라 변경되지만 반드시 직접 비율로 변경되지는 않습니다. px 단위 대신 dp 단위를 사용하면 다양한 화면 밀도에 맞게 레이아웃의보기 크기를 적절하게 조정할 수 있습니다. 다시 말해, 다양한 장치에서 실제 UI 요소 크기에 일관성을 제공합니다.

px

픽셀-화면의 실제 픽셀에 해당합니다. 실제 측정 값은 장치마다 다를 수 있으므로이 측정 단위는 권장하지 않습니다. 각 장치는 인치당 다른 수의 픽셀을 가질 수 있으며 화면에서 사용 가능한 총 픽셀 수를 더 많거나 적을 수 있습니다.