Есть ли в Android представление для ввода целых чисел?

Я ищу что-то вроде отдельных частей диалогового окна выбора даты. Представление, которое позволяет вам вводить целые числа (и только целые числа), которые вы можете ограничить (например, от 1 до 10), где вы можете использовать клавиатуру или стрелки в самом представлении. Он существует?

Это для диалога. Также поможет готовый диалог для запроса целого числа.


person pupeno    schedule 07.02.2009    source источник


Ответы (5)


Виджет 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, будущая совместимость может быть нарушена, если вы используете отражение. Безопаснее всего будет откатить свой из исходников.

Первоначальный источник этой информации находится в этой .

person Will    schedule 07.02.2009

Внутренний виджет NumberPicker был извлечен из исходного кода Android и упакован для вашего использования, и вы можете найти его здесь. Работает отлично!

ИЗМЕНИТЬ: исходная ссылка недоступна, вы можете найти копию виджета здесь

person Bryan Denny    schedule 15.05.2010
comment
@AlanMoore, кажется ... Вот его источник, который я использовал в своем приложении с открытым исходным кодом: code.google.com/p/tippytipper/source/browse/trunk/ - person Bryan Denny; 17.10.2011
comment
Вторая ссылка тоже не работает - person Forrest Bice; 08.04.2014
comment
@ForrestBice Я переделал исходный код в проект библиотеки Android. Новое местоположение этого файла находится здесь: code.google.com/p/tippytipper/source/browse/trunk/. - person Bryan Denny; 08.04.2014

Как было упомянуто в другом месте, 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

person bmaupin    schedule 01.02.2012

Вы можете с EditText использовать android:inputType="number"

<EditText android:layout_height="wrap_content" android:id="@+id/editText1" android:inputType="number" android:layout_width="wrap_content"></EditText>
person ismail uzunok    schedule 19.12.2012

Вы можете просто использовать 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
                }
            }
        });

Это должно соответствовать вашей цели.

person Yash Joshi    schedule 14.05.2021