是否有在Android中输入整数的视图?

时间:2009-02-07 09:31:31

标签: android user-interface integer

我正在寻找类似日期选择器对话框的各个部分。一个视图,允许您输入可以限制的整数(仅限整数)(例如,在1到10之间),您可以在其中使用键盘或视图中的箭头。它存在吗?

用于对话。一个现成的对话框来请求一个整数也会有所帮助。

5 个答案:

答案 0 :(得分:23)

NumberPicker 小部件可能就是您想要的。不幸的是,它位于com.android.internal.Widget.NumberPicker,我们无法通过正常手段获得。

有两种方法可以使用它:

  1. 从android源代码复制代码
  2. 使用反射来访问小部件
  3. 这是在布局中使用它的xml:

    <com.android.internal.widget.NumberPicker
        android:id="@+id/picker"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
    

    这是设置NumberPicker设置的反射(我没有测试过这个):

    Object o = findViewById(R.id.picker);
    Class c = o.getClass();
    try 
    {
        Method m = c.getMethod("setRange", int.class, int.class);
        m.invoke(o, 0, 9);
    } 
    catch (Exception e) 
    {
        Log.e("", e.getMessage());
    }
    

    由于它是内部窗口小部件而不在SDK中,因此如果使用反射,可能会破坏未来的兼容性。从源头推出自己的产品是最安全的。

    此信息的原始来源在此Google Group中共享。

答案 1 :(得分:7)

NumberPicker内部窗口小部件已从Android源代码中提取并打包供您使用,您可以找到它here。效果很棒!

编辑:原始链接已关闭,您可以找到小部件的副本here

答案 2 :(得分:4)

mentioned elsewhere一样,自API 11(Android 3.0)起,Android SDK中现已提供NumberPicker:

http://developer.android.com/reference/android/widget/NumberPicker.html

对于Android&lt; 3.0,你可以在这里使用代码:
https://github.com/novak/numpicker-demo
https://github.com/mrn/numberpicker

答案 3 :(得分:0)

您可以使用EditText使用android:inputType="number"

<EditText android:layout_height="wrap_content" android:id="@+id/editText1" android:inputType="number" android:layout_width="wrap_content"></EditText>

答案 4 :(得分:0)

您可以简单地使用 EditText 并将 inputType 定义为 number。例如:

        <EditText
            android:id="@+id/etNumberInput"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="8dp"
            android:inputType="number" />

要将最大值限制为 10,您可以通过编程方式进行操作:

        final EditText et = findViewById(R.id.etNumberInput);

        et.addTextChangedListener(new TextWatcher() {
          
            public void afterTextChanged(Editable s) {}
            
            public void beforeTextChanged(CharSequence s, int start,
                                          int count, int after) {}
            
            public void onTextChanged(CharSequence s, int start,
                                      int before, int count) {
                if (Integer.parseInt(et.getText().toString()) > 10) {
                    et.setError("***Your error here***");
                    // your logic here; to limit the user from inputting
                    // a value greater than specified limit
                }
            }
        });

这应该可以达到您的目标。