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