作为背景可绘制对象的 LayerDrawable 不适用于 minSdkVersion=15 或更低版本



虽然我找不到任何 SDK 版本约束LayerDrawable(在 API 级别 1 中添加),但我用作背景的那个根据 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 与 19 相比,bgDrwbl缺少以下成员:

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

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

我对LayerDrawable太有偏见了,因为我以前在让它工作时遇到了太多麻烦......但事实证明,问题与它们或minSdkVersion无关,而是在某些设备的情况下,存在于第二项和第三项中定义的形状中。同样的问题在这里已经得到了解答。总之:

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

相关内容

  • 没有找到相关文章

最新更新