如何在SeekBar中隐藏/显示拇指图标

18

我有一个SeekBar,它使用自定义的可拖动块(drawable)。我想根据另一个控件的状态来显示/隐藏这个可拖动块。

我尝试从资源中加载drawable,然后使用SeekBar.setThumb()方法设置可拖动块(drawable),或者将其设置为null。

虽然设置为null可以隐藏可拖动块,但是我无法再次显示它。

6个回答

28

最好的方法是从XML为滑块设置可绘制图像(一直以来都是这样做的),然后当您想要隐藏/显示滑块可绘制图像时,只需操作其alpha值:

// Hide the thumb drawable if the SeekBar is disabled
if (enabled) {
    seekBar.getThumb().mutate().setAlpha(255);
} else {
    seekBar.getThumb().mutate().setAlpha(0);
}

编辑:

如果将 alpha 设为零后,缩略图显示为白色,请尝试添加

<SeekBar
    ....
    android:splitTrack="false" 
/>

12
好答案!但要小心——getThumb()仅适用于Jelly Bean(16)或更高版本的设备。对于之前的版本,请使用类似以下方式:setThumb(bHide ? getResources().getDrawable(R.color.transparent) : getResources() .getDrawable(R.drawable.player_seekbar_handle)); - goRGon
1
而对于getDrawable(int)已经被弃用,你可能想要编写类似这样的代码:setThumb(ContextCompat.getDrawable(context, bHide ? R.color.transparent : R.drawable.player_seekbar_handle)); - RestInPeace
2
对于 API 级别大于 21 的情况,您应该查看这个答案:链接 - TomCobo
对我来说,这在背景可绘制区域上留下了一个白色间隙。看起来滑块有一个非透明的容器视图,是吗? - Jensie
1
你可以尝试这个:android:splitTrack="false",详情请参考:https://dev59.com/vFgR5IYBdhLWcg3wH6Zs - BertKing

10

通过xml在SeekBar中隐藏拇指

 android:thumbTint="@color/transparent"

例如

<SeekBar
android:id="@+id/seekBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clickable="false"
android:thumb="@color/gray"
android:thumbTint="@android:color/transparent" />

你知道这是在哪个API级别引入的吗?它在Android SDK版本中能向后兼容到多久? - Andrew Mackenzie
3
这是在API 21中引入的。 - Jeremy
如果您要使用这种方法,还需要添加android:splitTrack="false"。 - Osagui Aghedo

5

最简单的方法是在SeekBar视图的XML中添加以下一行代码:

android:thumb="@android:color/transparent"

如果您要使用这种方法,还需要添加android:splitTrack="false"。 - Osagui Aghedo

2

您可以通过设置任意大的拇指偏移值来隐藏进度条拇指,这将使拇指移出视线。例如:

mySeekBar.setThumbOffset(10000);    // moves the thumb out of view (to left)

为了再次显示拇指,将偏移量设置为零或其他常规值即可:
mySeekBar.setThumbOffset(0);        // moves the thumb back to view

这种方法适用于所有API级别。

2
认为这似乎有些hacky......如果seekbar的最大值> 10000,则当seekbar的进度> 10000时,拇指将开始显示。 它还将在seekbar的开头开始出现,并且对用户来说会显得奇怪。 - dell116

1

通过xml在SeekBar中隐藏您的拇指

   android:thumb="@null"

0
只需将以下两行代码添加到您的SeekBar XML中即可:
android:thumbTint="#00D1CEB0"
android:splitTrack="false"

你的回答可以通过提供更多支持性信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人能够确认你的回答是否正确。你可以在帮助中心找到关于如何撰写好回答的更多信息。 - Community

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