Если вы посмотрите на исходный код AbsSeekBar
, вы найдете этот метод:
/**
* @hide
*/
protected void drawTickMarks(Canvas canvas) {
if (mTickMark != null) {
final int count = getMax() - getMin();
if (count > 1) {
final int w = mTickMark.getIntrinsicWidth();
final int h = mTickMark.getIntrinsicHeight();
final int halfW = w >= 0 ? w / 2 : 1;
final int halfH = h >= 0 ? h / 2 : 1;
mTickMark.setBounds(-halfW, -halfH, halfW, halfH);
final float spacing = (getWidth() - mPaddingLeft - mPaddingRight) / (float) count;
final int saveCount = canvas.save();
canvas.translate(mPaddingLeft, getHeight() / 2);
for (int i = 0; i <= count; i++) {
mTickMark.draw(canvas);
canvas.translate(spacing, 0);
}
canvas.restoreToCount(saveCount);
}
}
}
Важной частью является строка if (count > 1)
;по какой-то причине команда Google решила, что галочки не должны отображаться, если есть только два выбираемых значения.
Нет прекрасного способа обойти это.
Вам придетсяпереопределите весь этот метод, но он помечен @hide
, что означает, что внешний мир не должен знать об этом.Это на самом деле * не остановит вас от этого, но это означает, что вам всегда нужно беспокоиться о том, что он сломается при обновлении Android.
Другая проблема заключается в том, что этот метод использует многополей, к которым у вас не будет доступа.Вы можете использовать геттеры, чтобы обойти это, но это немного коряво.
Собрав вместе, вы можете сделать этот класс:
public class MySeekBar extends SeekBar {
public MySeekBar(Context context, AttributeSet attrs) {
super(context, attrs);
}
protected void drawTickMarks(Canvas canvas) {
if (getTickMark() != null) {
final int count = getMax() - getMin();
// this is the important part: you change this to 0 from 1
if (count > 0) {
final int w = getTickMark().getIntrinsicWidth();
final int h = getTickMark().getIntrinsicHeight();
final int halfW = w >= 0 ? w / 2 : 1;
final int halfH = h >= 0 ? h / 2 : 1;
getTickMark().setBounds(-halfW, -halfH, halfW, halfH);
final float spacing = (getWidth() - getPaddingLeft() - getPaddingRight()) / (float) count;
final int saveCount = canvas.save();
canvas.translate(getPaddingLeft(), getHeight() / 2);
for (int i = 0; i <= count; i++) {
getTickMark().draw(canvas);
canvas.translate(spacing, 0);
}
canvas.restoreToCount(saveCount);
}
}
}
}