Seekbar progressdrawable 在 Android M 以下无法正常工作

Seekbar progressdrawable not work correctly below Android M

我有一个搜索栏,其高度为 16dp

minHeight="16dp"
maxHeight="16dp"

现在我必须使用自定义进度绘制。

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background">
    <shape android:shape="rectangle">
        <solid android:color="xxx"/>
        <corners android:radius="6dp"/>
    </shape>
</item>

<item
    android:id="@android:id/secondaryProgress"
    android:bottom="4dp"
    android:left="4dp"
    android:right="4dp"
    android:top="4dp">
    <clip>
        <shape android:shape="rectangle">
            <solid android:color="xxx"/>
            <corners android:radius="4dp"/>
        </shape>
    </clip>
</item>

<item
    android:id="@android:id/progress"
    android:bottom="4dp"
    android:left="4dp"
    android:right="4dp"
    android:top="4dp">
    <clip>
        <shape android:shape="rectangle">
            <solid android:color="xxx"/>
            <corners
                android:radius="4dp"/>
        </shape>
    </clip>
</item>

如您所见,我使用 lefttoprightbottom 来插入 progresssecondaryProgress

它在 Android M 以上运行良好,但在 Android M 以下,porgress 和 secondaryProgress 填充 background 换句话说background 项被 progresssecondaryProgress 覆盖。但我希望进度和 secondaryProgress 小于背景项。

有解决办法:

LayerDrawable drawable = (LayerDrawable) mSeekBar.getProgressDrawable();
// secondaryProgress
drawable.setLayerInset(1, padding, padding, padding, padding);
// progress
drawable.setLayerInset(2, padding, padding, padding, padding);

谁能解释一下为什么在 API 23 以下的 xml 中设置 left right top bottom 没用?