0

LayerDrawable (added in API level 1)에 대한 SDK 버전 제약 조건을 찾을 수는 없지만 배경으로 사용하고있는 SDK 버전은 minSdkVersion에 따라 다르게 작동합니다. 15 이하이면 배경이 완전히 검은 색이고 19 이상이면 (KitKat <) 레이어가 예상대로 표시됩니다.배경 drawable로 LayerDrawable이 작동하지 않습니다.

프로그래밍 방식으로 레이어 목록의 첫 번째 항목을 교체합니다.

BitmapDrawable bitmapDrawable = (BitmapDrawable) resources.getDrawable(R.drawable.xyz1); 
bitmapDrawable.setColorFilter(getColor(), PorterDuff.Mode.MULTIPLY); 
bitmapDrawable.setTileModeXY(TileMode.REPEAT, TileMode.REPEAT); 

LayerDrawable bgDrwbl = (LayerDrawable) resources.getDrawable(R.drawable.mylayerdrawable); 
bgDrwbl.setDrawableByLayerId(R.id.frameBitmap, bitmapDrawable); 

int sdk = android.os.Build.VERSION.SDK_INT; 
if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) { 
    v.setBackgroundDrawable(bgDrwbl); 
} else { 
    v.setBackground(bgDrwbl); 
} 

mylayerdrawable는 다음과 같은 경우 : 다음

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > 

<item 
    android:id="@+id/frameBitmap" 
    android:left="@dimen/card_frame_width" 
    android:right="@dimen/card_frame_width" 
    android:top="@dimen/card_frame_width" 
    android:bottom="@dimen/card_frame_width" > 

    <bitmap 
     android:tileMode="repeat"/> 
</item> 
<item> 
    <shape android:shape="rectangle" > 
     <stroke 
      android:height="@dimen/card_frame_width" 
      android:width="@dimen/card_frame_width" 
      android:color="#000000" /> 

     <corners android:radius="4dp" /> 
    </shape> 
</item> 
<item 
    android:left="0.4dp" 
    android:right="0.4dp" 
    android:top="0.4dp" 
    android:bottom="0.4dp"> 
    <shape android:shape="rectangle" > 
     <stroke 
      android:height="1.8dp" 
      android:width="1.8dp" 
      android:color="#EAEAEA" /> 

     <corners android:radius="4dp" /> 
    </shape> 
</item> 

디버깅하는 동안 내가 발견 여기에 (어떤 문제가 안하지만) 나는 LayerDrawable 클래스를 사용하는 방법입니다 누락 된 멤버 bgDrwbl은 minSdkVersion = 15와 비교하여 19 :

  • LayerDrawable.mLayerState.mAutoMirrored
  • LayerDrawable.mLayoutDirection (기본 클래스의 멤버 : Drawable) (?)

그 중 하나가 중요한 경우 누군가가 나처럼 LayerDrawable를 사용하는 경우 나도 몰라,하지만 난 어느 쪽도 없어 경고도 찾을 수 다른 SDK 버전에서 LayerDrawable을 사용하는 것에 대한 제안. 어떤 힌트가 있습니까?

+1

'setDrawableByLayerId'를 호출하지 않고도 작동합니까? – pskink

+0

'setDrawableByLayerId()'를 호출하지 않아도 동일합니다. xml로 놀고 난 후에 문제는 첫 번째 레이어 (비트 맵 레이어)가 아니라 두 번째와 세 번째로 비트 맵 주위에 둥근 프레임을 만들어야한다는 것을 알았습니다. 두 번째 및 세 번째 레이어를 제거하면 비트 맵을 표시 할 수 있으며 둘 중 하나를 추가하면 같은 문제가 발생합니다 (검은 색 배경). – meztelentsiga

답변

0

이전에 작동 시키기에는 너무 많은 어려움을 겪었 기 때문에 나는 너무 편견이었습니다 ... 그러나 문제는 그 문제 나 minSdkVersion과 관련이 없지만 두 번째 및 세 번째 항목을 표시합니다. 동일한 문제는 이미 here 님에게 응답되었습니다. 한마디로 :

그래서 가 검은 색 페인트 몇 가지 장치와 같은 색상없이 테두리 모양을 떠나지 않을!