Как отобразить метку с помощью компонента «Слайдер материала»? - PullRequest
3 голосов
/ 02 апреля 2020

Iam с использованием компонента Slider of Material:

https://github.com/material-components/material-components-android/blob/master/docs/components/Slider.md

Iam пытается отобразить метку при движении большого пальца, что, кажется, поддерживается атрибут labelFormatter.

вот как выглядит мой код:

Slider s = new Slider(context);
    s.setLabelFormatter(new Slider.LabelFormatter() {
        @NonNull
        @Override
        public String getFormattedValue(float value) {
            return "MY STRING";
        }
    });

Когда я go построчно с отладчиком, он проходит через эту функцию:

private void drawLabelText(@NonNull Canvas canvas, int width, int top) {
labelTextPaint.getTextBounds(labelText, 0, labelText.length(), labelTextBounds);
int left = trackSidePadding + (int) (thumbPosition * width) - labelTextBounds.width() / 2;
canvas.drawText(labelText, left, top - labelTextTopOffset - thumbRadius, labelTextPaint);  }

но текст не отображается, только ползунок ...

Я немного нововведен в androïd, и я определенно что-то упускаю.

Спасибо за помощь:)

РЕДАКТИРОВАТЬ 1:

Вот весь упрощенный код:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    CoordinatorLayout layout = new CoordinatorLayout(this);
    setContentView(layout);

    // I am Using Coordinator Layout for current activity so...
    CoordinatorLayout.LayoutParams layoutParams = new CoordinatorLayout.LayoutParams(
            ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);

    //Setting gravity to CENTER
    layoutParams.gravity = Gravity.CENTER;

    Slider slider = new Slider(this);
    slider.setLabelFormatter(new Slider.LabelFormatter() {
        @NonNull
        @Override
        public String getFormattedValue(float value) {
            return "MY STRING";
        }
    });

    layout.addView(slider, layoutParams);
}

Но все еще не работает ...

результат вывода

enter image description here

https://youtu.be/obV4K-Nxu-0

РЕДАКТИРОВАТЬ 2:

Обновление компонента Material из версии: '1.2.0-alpha02' до версии : «1.2.0-alpha05» исправил проблему.

1 Ответ

1 голос
/ 04 апреля 2020

На самом деле я хотел прокомментировать, но из-за ограничений репутации я не смог, похоже, вы добавляете представление программно в вашу деятельность. Здесь я реализовал новый MaterialComponent Slider с LabelFormatter

    ViewGroup group = findViewById("YOUR_ACTIVITY_LAYOUT");

    // I am Using Coordinator Layout for current activity so...
    CoordinatorLayout.LayoutParams layoutParams = new CoordinatorLayout.LayoutParams(
            ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);

    //Setting gravity to CENTER
    layoutParams.gravity = Gravity.CENTER;

    Slider slider = new Slider(this);
    slider.setLabelFormatter(new Slider.LabelFormatter() {
        @NonNull
        @Override
        public String getFormattedValue(float value) {
            return "MY STRING";
        }
    });

    group.addView(slider, layoutParams);
}

И вот вам go ... Slider Demo

...