首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从NumberPicker获得浮动/双倍

从NumberPicker获得浮动/双倍
EN

Stack Overflow用户
提问于 2013-08-27 11:49:26
回答 2查看 5.8K关注 0票数 4

我正在尝试https://github.com/SimonVT/android-numberpicker库,引用现在是https://developer.android.com/reference/android/widget/NumberPicker.html#getValue%28%29,API级别11 NumberPicker返回getValue方法中的int值,以及SimonVT编号选择器返回int值。

但是,我使用以下代码在数字选择器中设置了双值:

代码语言:javascript
复制
String[] nums = {"1","1.5","2","2.5","3","3.5","4","4.5","5","5.5","6","6.5","7","7.5","8","8.5","9"};

final NumberPicker listeningScorenp = (NumberPicker) findViewById(R.id.listeningScore);
listeningScorenp.setMaxValue(nums.length-1);
listeningScorenp.setMinValue(0);
listeningScorenp.setWrapSelectorWheel(false);
listeningScorenp.setDisplayedValues(nums);

现在,我一直在研究如何从NUmberPicker中检索浮点/双值。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-29 03:17:36

我只是用你的代码进行了测试。getValue()实际上返回所选项的索引(仅当您设置显示的值时)。您所需要做的就是解析字符串,这样就可以得到所需的东西。

代码语言:javascript
复制
String[] nums = {"1","1.5","2","2.5","3","3.5","4","4.5","5","5.5","6","6.5","7","7.5","8","8.5","9"};
int index = listeningScorenp.getValue();
String val = nums[index];
float selectedFloat = Float.parseFloat(val);
票数 8
EN

Stack Overflow用户

发布于 2020-01-12 12:39:55

Kotlin中,您可以使用这个方便的NumberPicker扩展,它提供了一个对话框--它将Double值缩放为一个合适的Int范围,并在调用任何回调之前将Int值转换回Double。因此,它基本上掩盖了NumberPicker只支持Int这一事实。就好像NumberPicker真的会支持Double一样,试试吧!

下面是可以复制和粘贴的片段扩展

代码语言:javascript
复制
fun Fragment.showNumberPickerDialog(
    title: String,
    value: Double,
    range: ClosedRange<Double>,
    stepSize: Double,
    formatToString: (Double) -> String,
    valueChooseAction: (Double) -> Unit
) {
    val numberPicker = NumberPicker(context).apply {
        setFormatter { formatToString(it.toDouble() * stepSize) }
        wrapSelectorWheel = false

        minValue = (range.start / stepSize).toInt()
        maxValue = (range.endInclusive / stepSize).toInt()
        this.value = (value.toDouble() / stepSize).toInt()

        // NOTE: workaround for a bug that rendered the selected value wrong until user scrolled, see also: https://stackoverflow.com/q/27343772/3451975
        (NumberPicker::class.java.getDeclaredField("mInputText").apply { isAccessible = true }.get(this) as EditText).filters = emptyArray()
    }

    MaterialAlertDialogBuilder(context)
        .setTitle(title)
        .setView(numberPicker)
        .setPositiveButton("OK") { _, _ -> valueChooseAction(numberPicker.value.toDouble() * stepSize) }
        .setNeutralButton("Cancel") { _, _ -> /* do nothing, closes dialog automatically */ }
        .show()
}

然后您可以像这样使用:

代码语言:javascript
复制
showNumberPickerDialog(
    title = "Your Weight",
    value = 75.0, // in kilograms
    range = 10.0 .. 300.0,
    formatToString = { "$it kg" },
    valueChooseAction = { saveNewWeight(it) }
)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18464571

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档