首页 > 解决方案 > SeekBar setProgressDrawable 不适用于 Android API <= 21

问题描述

我将我的音乐播放器 Android 应用程序 minSdkVersion 设置为 18。当我在 API 21 和 19 上对其进行测试时,进度的颜色不是我所期望的。SeekBar 应该看起来像图片 1,但它变成了图片 2。(我仍然可以点击它,但颜色似乎是透明的。)

在此处输入图像描述 在此处输入图像描述

活动布局中 SeekBar 的 XML 代码:

<SeekBar
android:id="@+id/seekBar"
android:layout_width="match_parent"
android:layout_height="@8dp"
android:layout_toLeftOf="@id/full_time"
android:layout_toRightOf="@id/current_time"
android:layout_marginLeft="@16dp"
android:layout_marginRight="@16dp"
android:layout_centerVertical="true"
android:progressBackgroundTint="#E9E9E9"
android:progress="0"
android:indeterminate="false"
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
android:progressDrawable="@drawable/seek_bar"/>

seek_bar XML 代码:

<?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>
        <corners android:radius="4dip" />
        <solid android:color="#e9e9e9"/>
    </shape>
</item>

<item android:id="@android:id/secondaryProgress">
    <clip>
        <shape>
            <corners android:radius="4dip" />
            <solid android:color="@color/colorPink"/>
        </shape>
    </clip>
</item>

<item android:id="@android:id/progress">
    <clip>
        <shape>
            <corners android:radius="4dip" />
            <solid android:color="@color/colorPink"/>
        </shape>
    </clip>
</item>

该行android:progressDrawable="@drawable/seek_bar"/>不适用于 API <=21,即使我seekBar.setProgressDrawable(getResources().getDrawable(R.drawable.seek_bar));在活动的 OnCreate 方法中编写。但是,如果我在 API 23 上进行测试,有两种方法可以完美运行。如何设置进度颜色?

标签: android

解决方案


这听起来像是 SDK 级别的问题。这可能是因为progressBackgroundTint是在 API 21 中添加的吗?我建议您将 minSDK 更改为 >=21 并再次测试。


推荐阅读