23

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

这是一个对话。请求整数的现成对话框也会有所帮助。

4

5 回答 5

23

NumberPicker小部件可能是您想要的。不幸的是,它位于com.android.internal.Widget.NumberPicker我们无法通过正常方式到达的地方。

有两种使用方法:

  1. 从android源代码复制代码
  2. 使用反射访问小部件

这是在布局中使用它的 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中共享。

于 2009-02-07T17:44:45.463 回答
7

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

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

于 2010-05-15T20:58:00.323 回答
4

正如其他地方所提到的,NumberPicker 现在在 Android SDK 中可用,从 API 11(Android 3.0)开始:

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

对于 Android < 3.0,您可以在此处使用代码:
https ://github.com/novak/numpicker-demo
https://github.com/mrn/numberpicker

于 2012-02-01T19:00:37.207 回答
0

您可以使用 EditTextandroid:inputType="number"

<EditText android:layout_height="wrap_content" android:id="@+id/editText1" android:inputType="number" android:layout_width="wrap_content"></EditText>
于 2012-12-19T07:47:00.290 回答
0

您可以简单地使用 anEditText并将其定义inputTypenumber。例如:

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

这应该符合您的目标。

于 2021-05-14T21:14:45.347 回答