【问题标题】:Android number picker keyboard typeAndroid 数字选择器键盘类型
【发布时间】:2013-05-23 12:06:59
【问题描述】:

我有一个 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>

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

【问题讨论】:

  • android:inputType="number"。为 editext 设置此属性。我不清楚问题的数字选择器部分
  • 只要您在AlertDialog xml 布局中实现&lt;NumberPicker&gt;,它就会自动允许您正在寻找的所有功能。如果您仍然遇到问题,那么您应该发布您的 AlertDialog xml。
  • 我已经发布了我的对话框 xml
  • 这是现在默认的功能。你用的是什么主题?

标签: android


【解决方案1】:

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

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

// 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
        }
    }
}

【讨论】:

  • 我尝试以这种方式设置输入类型,但这对我不起作用。猜猜为什么会这样?
  • 没有任何好的猜测,除了谷歌可能会改变他们的底层实现。你打电话给setInput(myNumberPicker)了吗?如果您在调试器中进行操作,它会找到 EditText 吗?
  • 是的,我以这种方式调用了该函数,但我没有让它工作。我终于设法摆脱了displayedValues,所以我的输入类型仍然是数字。无论如何感谢您的帮助!
  • 工作正常。但是代码有一个小错误:instanceOf应该是instanceof(2次)。
  • @dexteritas - 谢谢;修复!我怀疑我在我的项目中使用了 Kotlin 代码。
【解决方案2】:

只写xml文件:-

inputType="number"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-12
    • 1970-01-01
    • 1970-01-01
    • 2016-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多