【问题标题】:How to display label using Slider of Material component?如何使用 Material 组件的 Slider 显示标签?
【发布时间】:2020-04-02 15:11:14
【问题描述】:

我正在使用 Slider of Material 组件:

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

我试图在拇指移动时显示标签,labelFormatter 属性似乎支持。

这是我的代码的样子:

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

当我逐行使用调试器时,它会通过这个函数:

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);  }

但没有文字只显示在滑块上...

我是 android 的新手,我肯定错过了一些东西。

感谢您的帮助:)

编辑 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);
}

但还是不行……

输出结果

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

编辑 2:

将 Material 组件从版本:“1.2.0-alpha02”更新到版本:“1.2.0-alpha05”修复了该问题。

【问题讨论】:

    标签: java android material-components-android


    【解决方案1】:

    实际上我想发表评论,但由于声誉限制,我无法发表评论, 看起来您正在以编程方式在活动中添加视图。在这里,我使用 LabelFormatter

    实现了新的 MaterialComponent Slider
        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);
    }
    

    然后你去...

    【讨论】:

    • 感谢您的回复,我尝试了您的解决方案,但仍然无法正常工作。我的问题已被编辑。
    • 尝试更改背景颜色。
    • 这不能解决问题。
    • 您使用的是哪个版本的材料组件?
    • 我使用的是版本:'1.2.0-alpha02'
    猜你喜欢
    • 1970-01-01
    • 2019-02-15
    • 1970-01-01
    • 1970-01-01
    • 2021-04-24
    • 2021-04-23
    • 2020-03-27
    • 2015-09-06
    • 1970-01-01
    相关资源
    最近更新 更多