4

我有一个 EditText,单击它会创建一个包含数字选择器的 AlertDialog。我想为用户提供滚动数字选择器并通过键盘输入值的选项。但我不知道如何设置 NumberPicker 的键盘类型,当前单击数字选择器的值时会显示全键盘。

我知道 EditText 你可以做 editText.setInputType,但是 NumberPicker 呢?


这是我的对话框 xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:holo="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="horizontal" >

<NumberPicker
    android:id="@+id/numberPicker1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"/>
</LinearLayout>

我不想设置编辑文本的输入类型。我想设置数字选择器的输入类型。单击编辑文本时,会创建一个包含数字选择器的对话框。它是我要设置输入类型的数字选择器。

4

2 回答 2

2

默认情况下,NumberPicker 现在使用inputType="number"除非您设置,否则会将displayedValues键盘恢复为完整模式,因为显示的值是String[].

在某些用例中,您可能希望覆盖此行为,例如,如果您的值是不连续的数字(0、5、10 等)或浮点数(1.0、1.5 等)。这是基于此问题的解决方案:

// Java
private void setInput(ViewGroup vg) {
    for(int i = 0; i < vg.getChildCount(); i++) {
        View child = vg.getChildAt(i);
        if(child instanceof ViewGroup) {
            // Recurse
            setInput((ViewGroup) child);
        } else if(child instanceof EditText) {
            // Force InputType
            ((EditText) child).setInputType(InputType.TYPE_CLASS_NUMBER);
        }
    }
}

...或者...

// Kotlin
private fun setInput(vg: ViewGroup) {
    (0..vg.childCount).map { vg.getChildAt(it) }.forEach {
        when (it) {
            is ViewGroup -> setInput(it) // recurse
            is EditText -> it.inputType = InputType.TYPE_CLASS_NUMBER
        }
    }
}
于 2018-01-12T10:59:08.267 回答
-3

只需写入 xml 文件:-

inputType="number"
于 2013-05-28T13:48:56.757 回答