LayerDrawable作为背景drawable不适用于minSdkVersion = 15或更低

时间:2016-06-05 16:56:31

标签: android android-4.4-kitkat layer-list layerdrawable bitmapdrawable

虽然我找不到LayerDrawableadded in API level 1)的任何SDK版本限制,但我用作背景的那个会根据minSdkVersion的不同而有所不同:如果它是15或更低,背景是完全黑色的,如果它是19或更高(KitKat<),图层将按预期显示。

我正在以编程方式替换图层列表中的第一个项目。以下是我使用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>

调试时我注意到minSdkVersion = 15中bgDrwbl的以下缺失成员与19相比:

  • LayerDrawable.mLayerState.mAutoMirrored
  • LayerDrawable.mLayoutDirection(基类成员:Drawable

如果有人像我这样使用LayerDrawable(?),我不知道其中任何一个是否至关重要,但我既没有得到任何警告也没有找到任何关于使用LayerDrawable使用不同的建议SDK版本。你有任何提示吗?

1 个答案:

答案 0 :(得分:0)

我对LayerDrawable的偏见太过分了,因为以前让它工作太麻烦了......但事实证明这个问题与它们或minSdkVersion无关,而是在形状内在某些设备的情况下,在第二和第三项中定义。 已经回答了同样的问题here。简而言之:

  

所以永远不要留下没有颜色边框的形状,就像某些设备一样   把它漆成黑色!