要更改标签的 背景颜色,您可以使用自定义样式:
<com.google.android.material.slider.RangeSlider
style="@style/Myslider"
...>
使用:
<style name="Myslider" parent="@style/Widget.MaterialComponents.Slider">
<item name="labelStyle">@style/My_Tooltip</item>
<item name="materialThemeOverlay">@style/ThemeOverlay.Slider</item>
</style>
<style name="My_Tooltip" parent="Widget.MaterialComponents.Tooltip">
<!-- background color of the Tooltip -->
<item name="backgroundTint">@color/...</item>
</style>
<style name="ThemeOverlay.Slider" parent="">
<!-- color used by the text in the Tooltip -->
<item name="colorOnPrimary">@color/...</item>
</style>
您可以使用LabelFormatter
自定义标签中的值。
例如:
RangeSlider slider = findViewById(R.id.slider);
slider.setLabelFormatter(new LabelFormatter() {
@NonNull
@Override
public String getFormattedValue(float value) {
//It is just an example
if (value == 3.0f)
return "TEST";
return String.format(Locale.US, "%.0f", value);
}
});
关于标签的行为,只有以下这些值可用(适用于1.2.0-beta01
和1.3.0-alpha01
版本):
LABEL_FLOATING
:标签仅在交互时可见。它会浮动在滑块上方,可能会覆盖此视图上方的视图。这是默认和推荐的行为。LABEL_WITHIN_BOUNDS
:标签仅在交互时可见。标签将始终绘制在此视图的边界内。这意味着当标签不可见时,滑块上方会出现额外空间。LABEL_GONE
:标签永远不会被绘制。目前似乎不可能始终显示标签。
您可以使用setLabelBehavior
方法或布局或样式中的labelBehavior
来设置标签行为。
<com.google.android.material.slider.RangeSlider
app:labelBehavior="withinBounds"/>
如果你想要改变标签的形状,可以查看这个答案。
本应该是一条评论,但我无法评论,所以就在这里了。
正如Gabriele已经告诉你的那样,你不能永久地将标签(TooltipDrawable
)粘贴在滑块上方。实际上,你应该重写BaseSlider
的几个方法,但它们依赖于私有字段。
我还想说(给访客们),我无法像Gabriele说的那样更改标签的文本颜色。我使用的是版本1.3.0-alpha01
。
我不得不重新设置另一个组件TextAppearance.MaterialComponents.Tooltip
的样式。
my_layout.xml
<com.google.android.material.slider.Slider
...
app:labelStyle="@style/MyTooltip"
...
/>
res/values/styles.xml:
<style name="MyTooltip" parent="Widget.MaterialComponents.Tooltip">
<item name="backgroundTint">...</item>
<item name="android:textAppearance">@style/MyTooltip.TextAppearance</item>
</style>
<style name="MyTooltip.TextAppearance" parent="@style/TextAppearance.MaterialComponents.Tooltip">
<item name="android:textColor">...</item>
<item name="android:fontFamily">...</item>
<item name="fontFamily">...</item>
<item name="android:textSize">...</item>
</style>
我希望跟进Gabrielle,具体涉及重新标记“材料滑块”的内容。
在实施类似功能时:
RangeSlider slider = findViewById(R.id.slider);
slider.setLabelFormatter(new LabelFormatter() {
@NonNull
@Override
public String getFormattedValue(float value) {
//It is just an example
if (value == 3.0f)
return "TEST";
return String.format(Locale.US, "%.0f", value);
}
});
请确保正确确定滑块的类型。如果您正在使用material.Slider,则需要将 RangeSlider
更改为 Slider
,因为Android无法自动转换数据类型。