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

时间:2017-08-29 03:30:50

标签: android android-drawable android-seekbar layer-list

我有一个高度为16dp的搜索栏。

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

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

<?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项目由progress覆盖}和secondaryProgress但我希望进度和secondaryProgress小于背景项。

1 个答案:

答案 0 :(得分:0)

有一个解决方案:

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无用吗?