Comment créer un dialog de sélection de numéros?

Je veux pouvoir créer un dialog qui permette à l’utilisateur de choisir un numéro dans une plage spécifiée.

Je sais qu’il existe déjà des widgets (comme ceux de quietlycoding et celui de SimonVT), mais j’ai du mal à les intégrer correctement dans mon application. En outre, ce sont principalement des widgets. Je veux quelque chose qui est très similaire à celui dans les tutoriels de la page des développeurs Android.

J’ai également vérifié la documentation du NumberPicker et dit d’aller vérifier les exemples TimePicker et DatePicker, mais ils montrent seulement comment utiliser les sélecteurs de date et heure et j’ai de la difficulté à contourner le code et à essayer de convertir le Sélecteur de temps à un sélecteur de nombre normal. Est-ce que quelqu’un a une idée par où commencer? J’ai cherché des solutions pour les 3 dernières heures en vain.

    J’ai fait une petite démo de NumberPicker. Cela peut ne pas être parfait mais vous pouvez utiliser et modifier les mêmes.

     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(Ssortingng.valueOf(np.getValue())); d.dismiss(); } }); b2.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { d.dismiss(); } }); d.show(); } } 

    activity_main.xml

         

    dialog.xml

          

    Modifier:

    sous res / values ​​/ dimens.xml

       16dp 16dp  

    Pour afficher NumberPicker dans AlertDialog utilisez ce code:

     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

        

    Envisagez d’utiliser un Spinner au lieu d’un sélecteur de numéros dans un dialog. Ce n’est pas exactement ce qui a été demandé, mais il est beaucoup plus facile à mettre en œuvre, la conception de l’interface utilisateur plus contextuelle, et devrait remplir la plupart des cas d’utilisation. Le code équivalent pour un Spinner est:

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

    Un exemple simple:

    layout / 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);// ressortingcted number to minimum value ie 1 np.setMaxValue(31);// ressortingcked 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 Ssortingng Old = "Old Value : "; Ssortingng New = "New Value : "; } }); Log.d("NumberPicker", "NumberPicker"); } }/* NumberPickerActivity */ 

    AndroidManifest.xml: Spécifiez le thème de l’activité en tant que thème de dialog.

       

    J’espère que ça va aider.

    Pour les amateurs de kotlin.

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

    et number_picker_dialog.xml