2013-07-30 13 views
14

Ich möchte eine Nummernauswahl verwenden, um den Rabatt Prozentsatz vom Benutzer zu erhalten. Sobald der Benutzer den Verkaufspreis eingegeben hat, möchte ich ein Dialogfeld erscheinen, in dem Sie nach dem Rabattprozentsatz gefragt werden. Ich finde keine Möglichkeit, den Nummernpicker in den Dialog zu integrieren.Wie Nummer-Picker mit Dialogfeld zu verwenden

+0

Google ** Alarm Dialog ** und sehen diese [Antwort] (http://stackoverflow.com/a/27263520/1341526) – jacktrades

Antwort

25

ich eine kleine Demo von Number gemacht haben. Dies ist möglicherweise nicht perfekt, aber Sie können dasselbe verwenden und ändern.

Verwenden Sie ein benutzerdefiniertes Dialogfeld und legen Sie die Zahlenauswahl fest.

Mehr 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-Schuss

enter image description here

+0

ich bin ein Hintergrundbild mit mit gepunkteten Linien, jetzt möchte ich den Benutzer auf die gepunkteten Linien zu zeichnen, und ich muss es bestätigen, ob es richtig ist oder nicht? Ist es in Canvas möglich und wie kann ich damit fortfahren? – user2841300

+0

@Raghunandan: Gibt es eine Möglichkeit, den Picker beim Klicken auf den Mittelwert zu schließen? Ich meine, es gibt 3 Werte sichtbar, wenn ich auf ausgewählten Wert klicken, wird der Number verschwinden? Ohne die Ok/Cancel-Taste zu benutzen.Ich habe onClick Methode von NumberPicker aber keine Ausgabe versucht. :( –

+0

Dies kann in viel weniger Code erfolgen: http://Stackoverflow.com/a/40007699/1496122 – k2col

28

Bitte versuchen Sie den folgenden 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

Dieser Code ist perfekt läuft gut auch für mich. Ich möchte einen weiteren Zahlenwähler hinzufügen. Ich kann es erreichen, aber nicht formatieren. Können Sie mir helfen, die gleiche Breite auf zwei Zahlenauswahl mit nur Java einzustellen. –

+1

Schön! Danke vielmals. Dies verwendet die Android-Plattform-Tasten, also ist dies die eine zu gehen. Sparte mir viel Zeit. –

+0

Ich habe diese Antwort gewählt, weil das Fummeln mit einem XML-Layout nur für einen Dialog zu mühsam ist. Dieser sah auch besser aus, als ich ihn implementiert habe. – LordParsley

7

Das ist viel kürzer Variation der anderen Antworten

final NumberPicker picker = new NumberPicker(context); 
picker.setMinValue(1); 
picker.setMaxValue(50); 

final 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, new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialogInterface, int i) { 
      // do something with picker.getValue() 
     } 
    }) 
    .setNegativeButton(android.R.string.cancel, null) 
    .show(); 
+1

Es funktioniert Eigenschaft.Ich benutze in einem EditText, Einstellung auffokusable auf False und Einstellung der OnClickListener machen die Ansicht "single" klickbar. Danke! – brunoramonalmeida

0

eine DialogFragment erstellen onCreateDialog Verfahren implementiert, die die Ansicht enthält Number Warnmeldung zurückgibt. das Dialogfragment in der Aktivität Instantiate, wo Sie brauchen Anzahl Picker Dialog zu zeigen, und es zeigen.

Aktivieren Sie die Host-Aktivität, um die Schnittstelle "NumberPicker.OnValueChangeListener" zu implementieren, sodass positive und negative Klickereignishandler im Dialogfeld den aktuellen Wert von NumberPicker übergeben können, indem sie die onValueChange-Methode aufrufen.

Für weitere Informationen können Sie sehen 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; 
    } 
}