2017-05-07 3 views
0

에 내가 background.xml라는 fallowing 묘화가없는 경우 당김이 사라은 XML은 (일부 재현 경우에, 드로어 블 폴더 아래에 확실하지 않을 때 왜, 아마도 뭔가를 가지고안드로이드는 - 올바른 해상도

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item> 
    <shape> 
     <gradient 
      android:angle="90" 
      android:startColor="@color/gradient_bottom" 
      android:endColor="@color/gradient_top" 
      android:type="linear" /> 
    </shape> 
</item> 
</selector> 

높은 메모리 소비로 수행) 배경이 사라집니다. 일은 내가 시나리오를 다시 내가 모든 드로어 블 해상도 폴더에 같은 XML을 넣을 때

그러나, 배경이 사라지지 않는다 (즉, 당김-hdpi에는, 당김-xhdpi 등)

이런 종류의 일이 일어나지 않아야합니다. 누군가가 왜 그런 일이 일어나고 그것을 더 우아하게 해결할 수 있는지 설명 할 수 있습니까?

PS - 내가 배경으로 단색을 넣을 때

  1. 이 문제가 문제가 또한 사용자 지정 버튼의 배경으로 발생하고 내가 넣으면 고정

  2. 을 발생하지 않습니다 드로어 블 해상도 폴더의 사용자 정의 배경

답변

1

가능하면 dpi 한정자를 사용하는 리소스 디렉토리를 사용하는 것이 좋습니다. 그렇지 않으면 일부 장치에서 OutOfMemory 오류가 발생할 수 있습니다. 여기에 설명 : 기본적으로

는, 안드로이드는 (.PNG, .JPG, .gif 파일) 비트 맵 드로어 블과 나인 패치 드로어 블을 (파일 .9.png) 그래서 그들은 적절한 물리적 크기로 렌더링 확장 각 장치에. 예를 들어, 응용 프로그램이 기준선, 중간 화면 밀도 (mdpi)에 대해서만 비트 맵 드로어 블을 제공하는 경우 시스템은 고밀도 화면에서는 배율을 높이고 저밀도 화면에서는 배율을 낮 춥니 다. 이 크기 조정은 비트 맵에 아티팩트를 유발할 수 있습니다. 비트 맵을 최상으로 보이게하려면 화면 밀도가 다른 다른 해상도의 대체 버전을 포함해야합니다.

이 시스템에 따라 적절한 대체 리소스 를 사용


런타임시

, 시스템은 임의의 주어진 리소스에 대해 다음의 순서로 현재 화면 최상의 디스플레이를 보장 현재 화면의 크기와 밀도에 따라 시스템은 응용 프로그램에서 제공되는 모든 크기 및 밀도 관련 자원을 사용합니다. 예를 들어, 장치에 고밀도 화면이 있고 응용 프로그램이 드로어 블 리소스를 요청하면 시스템은 장치 구성과 가장 일치하는 드로어 블 리소스 디렉토리를 찾습니다. 사용 가능한 다른 대체 자원에 따라 hdpi 한정자 (예 : drawable-hdpi /)가있는 자원 디렉토리가 가장 일치 할 수 있으므로 시스템은이 디렉토리의 drawable 자원을 사용합니다.

일치하는 리소스를 사용할 수없는 경우 시스템은 기본 리소스를 사용하고 현재 화면 크기 및 밀도와 일치하도록 필요에 따라 위 또는 아래로 확장합니다. "기본"리소스는 구성 한정자로 태그 지정되지 않은 리소스입니다. 예를 들어 drawable /의 자원은 기본 드로어 블 자원입니다. 시스템은 기본 자원이 기본 화면 크기 및 밀도 (보통 화면 크기 및 중간 밀도)에 맞게 설계되었다고 가정합니다.따라서 시스템은 고밀도 화면의 경우 기본 밀도 리소스를 확장하고 적절하게는 저밀도 화면의 경우 낮 춥니 다. 그러나 시스템이 밀도 특정 자원을 찾고 밀도 특정 디렉토리에서 찾지 못하면 항상 기본 자원을 사용하지는 않습니다. 시스템은 스케일링시 더 나은 결과를 제공하기 위해 다른 밀도 관련 자원 중 하나를 대신 사용할 수 있습니다. 예를 들어, 저밀도 자원을 찾고 사용할 수없는 경우, 시스템은 고밀도 버전의 자원을 저밀도로 쉽게 스케일링 할 수 있기 때문에 고밀도 버전의 자원을 스케일 다운하는 것을 선호합니다. 중간 밀도 리소스를 0.75 배로 스케일링하는 것에 비해 0.5 배, 인공물은 적습니다.

Source

+0

그러나 배경은 일반적으로 작동 않는 이유는 무엇입니까? dpi 한정자를 사용하여 디렉토리에 넣은 xml은 원래 것과 같습니다. 시스템이 기본 드로어 블 폴더를 사용하는 경우 동일한 폴더이지만이 파일을 찾을 수없는 것 같습니다. – BennyP

+0

@BennyP 장치 및 리소스 파일의 해상도에 따라 다릅니다. 시스템이 기본 드로어 블 폴더에서 리소스를 가져올 때마다 매번 화면에 맞게 확장됩니다. 확장 프로세스는 메모리를 사용합니다. 확장 프로세스에서 너무 많은 메모리를 사용하면 오류 또는 성능 문제가 발생할 수 있습니다. 예를 들어 배경 이미지 (기본 드로어 블 폴더)를 사용하면 Galaxy S3에서 작동하지만 Galaxy S4에서는 충돌이 발생할 수 있습니다. 나는 4-5 년 전에 비슷한 문제에 직면했다. –

+0

이해하고 받아들입니다. – BennyP