how to use number picker with dialog

后端 未结 4 1370
野的像风
野的像风 2020-12-03 05:16

I want to use a number picker for the purpose of getting the discount percentage from the user. once the user enters the sale price, i want a dialog box to appear asking for

相关标签:
4条回答
  • 2020-12-03 05:45

    Please try the following code:

            RelativeLayout linearLayout = new RelativeLayout(mContext);
            final NumberPicker aNumberPicker = new NumberPicker(mContext);
            aNumberPicker.setMaxValue(50);
            aNumberPicker.setMinValue(1);
    
            RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(50, 50);
            RelativeLayout.LayoutParams numPicerParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
            numPicerParams.addRule(RelativeLayout.CENTER_HORIZONTAL);
    
            linearLayout.setLayoutParams(params);
            linearLayout.addView(aNumberPicker,numPicerParams);
    
            AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(mContext);
            alertDialogBuilder.setTitle("Select the number");
            alertDialogBuilder.setView(linearLayout);
            alertDialogBuilder
                    .setCancelable(false)
                    .setPositiveButton("Ok",
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog,
                                                    int id) {
                                    Log.e("","New Quantity Value : "+ aNumberPicker.getValue());
    
                                }
                            })
                    .setNegativeButton("Cancel",
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog,
                                                    int id) {
                                    dialog.cancel();
                                }
                            });
            AlertDialog alertDialog = alertDialogBuilder.create();
            alertDialog.show();
    
    0 讨论(0)
  • 2020-12-03 05:45

    Create a DialogFragment implementing onCreateDialog method which returns alert dialog containing the NumberPicker view. Instantiate the dialog fragment in the activity where you need to show number picker dialog and show it.

    Make the host activity implement NumberPicker.OnValueChangeListener interface so that positive and negative button click event handlers in dialog can pass the current value from NumberPicker by calling the interface onValueChange method.

    For more information you can see http://www.zoftino.com/android-numberpicker-dialog-example .

    public class NumberPickerDialog extends DialogFragment {
        private NumberPicker.OnValueChangeListener valueChangeListener;
    
            @Override
            public Dialog onCreateDialog(Bundle savedInstanceState) {
    
                final NumberPicker numberPicker = new NumberPicker(getActivity());
    
                numberPicker.setMinValue(20);
                numberPicker.setMaxValue(60);
    
                AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
                builder.setTitle("Choose Value");
                builder.setMessage("Choose a number :");
    
                builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        valueChangeListener.onValueChange(numberPicker,
                                numberPicker.getValue(), numberPicker.getValue());
                    }
                });
    
            builder.setNegativeButton("CANCEL", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    valueChangeListener.onValueChange(numberPicker,
                            numberPicker.getValue(), numberPicker.getValue());
                }
            });
    
            builder.setView(numberPicker);
            return builder.create();
        }
    
        public NumberPicker.OnValueChangeListener getValueChangeListener() {
            return valueChangeListener;
        }
    
        public void setValueChangeListener(NumberPicker.OnValueChangeListener valueChangeListener) {
            this.valueChangeListener = valueChangeListener;
        }
    }
    
    0 讨论(0)
  • 2020-12-03 05:56

    I have made a small demo of NumberPicker. This may not be perfect but you can use and modify the same.

    Use a custom dialog and set the number picker.

    More info @

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

    public class MainActivity extends Activity implements NumberPicker.OnValueChangeListener
    {
        private 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);// on click of button display the dialog
             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); // max value 100
             np.setMinValue(0);   // min value 0
             np.setWrapSelectorWheel(false);
             np.setOnValueChangedListener(this);
             b1.setOnClickListener(new OnClickListener()
             {
              @Override
              public void onClick(View v) {
                  tv.setText(String.valueOf(np.getValue())); //set the value to textview
                  d.dismiss();
               }    
              });
             b2.setOnClickListener(new OnClickListener()
             {
              @Override
              public void onClick(View v) {
                  d.dismiss(); // dismiss the dialog
               }    
              });
           d.show();
    
    
        }
    }
    

    activity_main.xml

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity" >
    
        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/hello_world" />
    
        <Button
            android:id="@+id/button11"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true"
            android:text="Open" />
    
    </RelativeLayout>
    

    dialog.xml

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >
    
        <NumberPicker
            android:id="@+id/numberPicker1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="64dp" />
    
        <Button
            android:id="@+id/button2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/numberPicker1"
            android:layout_marginLeft="20dp"
            android:layout_marginTop="98dp"
            android:layout_toRightOf="@+id/numberPicker1"
            android:text="Cancel" />
    
        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBaseline="@+id/button2"
            android:layout_alignBottom="@+id/button2"
            android:layout_marginRight="16dp"
            android:layout_toLeftOf="@+id/numberPicker1"
            android:text="Set" />
    
    </RelativeLayout>
    

    Snap shot

    enter image description here

    0 讨论(0)
  • 2020-12-03 05:56

    This is a shorter variation of the other answers

    NumberPicker picker = new NumberPicker(context);
    picker.setMinValue(1);
    picker.setMaxValue(50);
    
    FrameLayout layout = new FrameLayout(context);
    layout.addView(picker, new FrameLayout.LayoutParams(
            FrameLayout.LayoutParams.WRAP_CONTENT,
            FrameLayout.LayoutParams.WRAP_CONTENT,
            Gravity.CENTER));
    
    new AlertDialog.Builder(context)
            .setView(layout)
            .setPositiveButton(android.R.string.ok, (dialogInterface, i) -> {
                // do something with picker.getValue()
                picker.getValue();
            })
            .setNegativeButton(android.R.string.cancel, null)
            .show();
    
    0 讨论(0)
提交回复
热议问题