1

먼저, 내가하는 일에 대한 배경 지식. 일반적으로 (단순한 개념) 참고 문헌을 잘 알고 있다면 2 절로 건너 뛰십시오.. 밀도의드로어 블 참조를 사용하는 경우 드로어 블이 누락 밀도 버킷에 맞게 스케일되지 않음

1 개념은

보통, 우리는 폴더와 같은 drawable-mdpi, drawable-hdpi 등의 드로어 블을 사용하여 참조합니다. 예 :

/drawable-mdpi 
    ./figure.png (24x24 pixels) 
/drawable-hdpi 
    ./figure.png (36x36 pixels) 
[...] 

그러나, 또 다른 방법은 (동일한?)를 달성하기위한 동작을 그리기 참조 통해 등등 drawable-nodpi 안에, 다른 크기, 동일한 그리기를 형성하고 values-mdpi, values-hdpi 각 크기를 참조하고있다. 예 :

/drawable-nodpi 
    ./figure_24.png 
    ./figure_36.png 
/values-mdpi 
    ./refs.xml 
/values-hdpi 
    ./refs.xml 

refs.xml 파일이 (/values-mdpi/refs.xml 예를 들어)과 같은 라인이 포함되어 있어야합니다

<item name="figure" 
    type="drawable">@drawable/figure_24</item> 

그런 식으로, 당신은 참조하지 않고 동일한 R.drawable.figure는 것 등을 참조 할 수 있습니다. 다른 크기 (예를 들어 24/36/48/72 및 48/72/96/144의 동일한 이미지를 사용)에서 동일한 이미지를 주소 지정해야 할 때 참조 할 수 있기 때문에이 옵션이 도움이된다는 것을 알았습니다. 이미지를 복제하지 않고 같은 이미지를 두 번 (예 : 다시 48 및 72 픽셀 이미지) 만들 수 있습니다 (따라서 APK 크기가 커지는 것을 피할 수 있음). 하나 알 수있는 바와 같이

누락 된 경우

2 밀도 참조가 작동하지 않습니다, 안드로이드는 드로어 블 제대로 [1]를 표시하기 위해 모든 버킷 밀도를 필요로하지 않는다. 예를 들어, drawable-ldpi을 완전히 생략하면 을로드하고 다른 drawable-* 폴더에있는 크기는입니다. 테스트 된 밀도로 적절한 크기로 표시됩니다. 사실, 많은 앱 (구글 포함)은 이미 ldpi와 아무런 공지도 빠뜨 렸습니다.

그러나 드로어 블 참조를 사용할 때 (위의 1 절 참조)이 동작이 변경된다는 것을 알았습니다. 밀도 폴더에서 참조 xml 파일을 생략하고 해당 밀도로 해당 드로어 블을 표시하려고하면 Android에서 가장 높은 밀도의 드로어 블 변형을 검색하지만 이 아닌은 해당 밀도에 따라 크기를 조정합니다.

예를 들어 설명해 드리겠습니다. 참조 된 드로어 블을 사용하여 values-ldpi/refs.xml을 생략하면 Android는 values-xxhdpi (최대 임의의 드로어 블을 제공함)에서 드로어 블을 검색하고 이에 해당하는 크기로 표시합니다. xxhdpi가 아니라 ldpi가 필요합니다. 따라서 ldpi 장치에 표시된 모든 레이아웃에는 거대한 이미지가 있습니다.LDPI의 당김이없는 경우에도 일반 드로어 블이 잘 작동)

A : 아래 이미지보기 하나의 밀도 참조 인 경우

enter image description here enter image description here enter image description here

A) 참조 된 드로어 블이 작동하지 않습니다 누락되었습니다 (values-ldpi/refs.xml에 명시적인 변종을 제공하지 않음) :

enter image description here enter image description here enter image description here

+0

리소스를 어떻게 사용하고 있습니까? 레이아웃에서'android : src' 참조? 레이아웃에서 'android : background' 참조? Java 코드에서 무엇인가를 통해? 다른 것? – CommonsWare

+0

안녕하세요 마크, 이러한 예제는 ImageViews의 src 태그를 통과합니다. – davidcesarino

+1

Google에 따르면 이슈 트래커를 보면 [이것은 전혀 작동하지 않습니다] (https://code.google.com/p/android/issues/detail?id=74825). 나는 왜 당신이 어떤 경우에는 작동하지만 다른 것은 작동하지 않는지를 설명 할 수 없다. – CommonsWare

답변

1

신경 끄시 고, 내가 바로 지금 LDPI 에뮬레이터에서 테스트하고 그것을 작동합니다. 따라서 IDE의 레이아웃 미리보기 창에만 영향을주는 버그 중 하나입니다.

예, 물어보기 전에 ldpi 에뮬레이터에서 테스트 했어야합니다. :)