如何更改SeekBar拇指的颜色?

23

我在我的安卓应用中使用了默认的 seekbar。我注意到当手指按住 seekbar 上的 thumb 时,它会变成黄色。相反,我希望在按住时它变成蓝色。这应该怎么做呢?如果这是一个基本问题,我很抱歉,因为我是新手。谢谢。

3个回答

33

使用图像过滤器来改变默认状态列表可绘制对象(包括SeekBar)的颜色:

  // Change seekbar color to green.
  SeekBar sb = (SeekBar) findViewById(R.id.seekBar1);
  sb.getProgressDrawable().setColorFilter(0xFF00FF00, PorterDuff.Mode.MULTIPLY);
  sb.getThumb().setColorFilter(0xFF00FF00, PorterDuff.Mode.MULTIPLY);

getThumb 方法只能在 API 16+(Jelly Bean)及以上版本中使用。


12
在我的情况下,我发现使用 sb.getProgressDrawable().setColorFilter(getResources().getColor(R.color.my_color), PorterDuff.Mode.SRC_ATOP) 更好。 - CrimsonX
2
@CrimsonX,你应该把这个作为一个答案添加进去。 - MaSza
或者您可以在XML文件中使用android:progressTint="@color/yourColor" - Kyo Huu
setColorFilter(int color, @NonNull Mode mode)已被弃用。 - RaffMag

24

无需额外的样式设计,安卓可以通过XML支持它。只需在您的SeekBar中添加android:thumbTint="@color/yourColor"

例如:

<SeekBar
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:max="100"
     android:thumbTint="@color/red"
     android:progress="0" />

11
对于 API 小于 21 的情况怎么办? - John Shelley
2
@JohnShelley 这适用于使用AppCompat主题的所有API级别...在样式.xml中:<style name="AppTheme.BlueSeekBar" parent="Widget.AppCompat.SeekBar"> <item name="colorAccent">@color/red</item> </style>在布局中: <SeekBar android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/AppTheme.BlueSeekBar" /> - Breeno
@Breeno 这个可以用,但只适用于旧API的拇指。你如何为其余部分设置样式? - Stan
1
你可以使用 DrawableCompat.setTint 在支持的版本中添加色彩。 - rahimli

20
如果你不喜欢默认的拇指图标,那么你需要创建自己的Drawable,并且可以在代码中使用以下类似的方式来设置拇指图标:

如果您不喜欢默认的拇指图标,则需要创建自己的Drawable,随后可以使用以下方式在代码中设置拇指图标:

Drawable thumb = getResources().getDrawable( R.drawable.myThumb );
SeekBar mSeekBar = (SeekBar) findViewById(R.id.mySeekBar);
mSeekbar.setThumb(thumb);

或者您可以在XML中设置拇指:

<SeekBar 
    ...
    android:thumb="@drawable/seek_thumb" />

实际的Drawable可以是图像、形状或任何您可能需要的其他类型的Drawable。如果您希望当按下拇指时它的外观发生变化,您将需要创建一个State List Drawable


1
我想使用默认的拇指。我只想改变它被按住时的颜色。 - vergil corleone
很不幸,缺省滑块的按下颜色是默认滑块本身的一部分。如果你想改变它,你需要自己实现它。我在这里找到了非 Holo 缺省图片,所以你应该能够使用它们来开始一个良好的开端。 - Bryan Herbst
1
这是一种在某些情况下非常有用的技术,但并不一定要创建自己的Drawable。请参考@zavidovych的答案,适用于API 16+。 - LarsH

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接