Как создать диалог выбора номера?

Я хочу иметь возможность создать диалог, который позволяет пользователю выбирать номер из указанного диапазона.

Я знаю, что есть уже существующие виджеты (например, те, что от quietcoding, и SimonVT), которые уже делают это, но мне трудно интегрировать их в мое приложение. Кроме того, это прежде всего виджеты. Я хочу что-то очень похожее на то, что было в уроках для разработчиков Android.

Я также проверил документацию для NumberPicker, и он сказал, чтобы проверить примеры TimePicker и DatePicker, но они показывают только, как использовать инструменты выбора времени и даты, и мне трудно с этим справляться с кодом и пытаться преобразовать Time Picker только для обычного выбора номера. Кто-нибудь знает, с чего начать? Я искал решения в течение последних 3 часов безрезультатно.

Я сделал небольшую демо NumberPicker. Это может быть не идеально, но вы можете использовать и изменять то же самое.

 public class MainActivity extends Activity implements NumberPicker.OnValueChangeListener { private static TextView tv; static Dialog d ; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv = (TextView) findViewById(R.id.textView1); Button b = (Button) findViewById(R.id.button11); b.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { show(); } }); } @Override public void onValueChange(NumberPicker picker, int oldVal, int newVal) { Log.i("value is",""+newVal); } public void show() { final Dialog d = new Dialog(MainActivity.this); d.setTitle("NumberPicker"); d.setContentView(R.layout.dialog); Button b1 = (Button) d.findViewById(R.id.button1); Button b2 = (Button) d.findViewById(R.id.button2); final NumberPicker np = (NumberPicker) d.findViewById(R.id.numberPicker1); np.setMaxValue(100); np.setMinValue(0); np.setWrapSelectorWheel(false); np.setOnValueChangedListener(this); b1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { tv.setText(String.valueOf(np.getValue())); d.dismiss(); } }); b2.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { d.dismiss(); } }); d.show(); } } 

activity_main.xml

     

dialog.xml

      

Редактировать:

под res / values ​​/ dimens.xml

   16dp 16dp  

Чтобы показать NumberPicker в AlertDialog используйте этот код:

 final AlertDialog.Builder d = new AlertDialog.Builder(context); LayoutInflater inflater = this.getLayoutInflater(); View dialogView = inflater.inflate(R.layout.number_picker_dialog, null); d.setTitle("Title"); d.setMessage("Message"); d.setView(dialogView); final NumberPicker numberPicker = (NumberPicker) dialogView.findViewById(R.id.dialog_number_picker); numberPicker.setMaxValue(50); numberPicker.setMinValue(1); numberPicker.setWrapSelectorWheel(false); numberPicker.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() { @Override public void onValueChange(NumberPicker numberPicker, int i, int i1) { Log.d(TAG, "onValueChange: "); } }); d.setPositiveButton("Done", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { Log.d(TAG, "onClick: " + numberPicker.getValue()); } }); d.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { } }); AlertDialog alertDialog = d.create(); alertDialog.show(); 

number_picker_dialog.xml

    

Подумайте об использовании Spinner вместо Picker в диалоговом окне. Это не совсем то, о чем просили, но гораздо проще реализовать, создать более контекстный дизайн пользовательского интерфейса и выполнить большинство случаев использования. Эквивалентный код для Spinner:

 Spinner picker = new Spinner(this); ArrayAdapter adapter = new ArrayAdapter(getActivity(), android.R.layout.simple_spinner_item, yourStringList); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); picker.setAdapter(adapter); 

Простой пример:

макет / billing_day_dialog.xml

      

NumberPickerActivity.java

 import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.widget.NumberPicker; public class NumberPickerActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.billing_day_dialog); NumberPicker np = (NumberPicker)findViewById(R.id.number_picker); np.setMinValue(1);// restricted number to minimum value ie 1 np.setMaxValue(31);// restricked number to maximum value ie 31 np.setWrapSelectorWheel(true); np.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() { @Override public void onValueChange(NumberPicker picker, int oldVal, int newVal) { // TODO Auto-generated method stub String Old = "Old Value : "; String New = "New Value : "; } }); Log.d("NumberPicker", "NumberPicker"); } }/* NumberPickerActivity */ 

AndroidManifest.xml: укажите тему для активности в качестве темы диалога.

   

Надеюсь, это поможет.

Для любителей котлин.

  fun numberPickerCustom() { val d = AlertDialog.Builder(context) val inflater = this.layoutInflater val dialogView = inflater.inflate(R.layout.number_picker_dialog, null) d.setTitle("Title") d.setMessage("Message") d.setView(dialogView) val numberPicker = dialogView.findViewById(R.id.dialog_number_picker) numberPicker.maxValue = 15 numberPicker.minValue = 1 numberPicker.wrapSelectorWheel = false numberPicker.setOnValueChangedListener { numberPicker, i, i1 -> println("onValueChange: ") } d.setPositiveButton("Done") { dialogInterface, i -> println("onClick: " + numberPicker.value) } d.setNegativeButton("Cancel") { dialogInterface, i -> } val alertDialog = d.create() alertDialog.show() } 

и number_picker_dialog.xml

   

  • Firestore - объект с внутренним объектом
  • Можем ли мы подключить удаленную базу данных MySQL на Android с помощью JDBC?
  • AsyncTask и обработка ошибок на Android
  • Можно ли изменить цвет текста на Android SearchView?
  • Быстрое и простое строковое шифрование / расшифровка в JAVA
  • Синхронизация позиций прокрутки ScrollView - android
  • Как использовать MediaCodec без MediaExtractor для H264
  • Как сохранить логическое значение с помощью SharedPreferences в Android?
  • Скачать карты для osmdroid
  • Xamarin Forms Android App Crashes запускает отладочную версию с помощью эмулятора VS Android
  • Использование статических переменных в Android
  • Давайте будем гением компьютера.