如何创build一个数字select器对话框?

我想能够创build一个对话框,允许用户从指定的范围内select一个数字。

我知道现在有一些小部件(比如那些来自静态编码和SimonVT的小部件)已经这样做了,但是我很难将这些小部件正确地集成到我的应用程序中。 另外,这些主要是小部件。 我想要的东西和android开发者页面教程非常相似。

我也检查了NumberPicker的文档,它说去检查TimePicker和DatePicker的例子,但他们只显示如何使用时间和dateselect器,我很难感觉我的代码周围的方式,并试图转换时间select器只是一个正常的号码选取器。 有没有人有任何想法从哪里开始? 我一直在寻找最后3个小时的解决scheme无济于事。

我做了一个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中

 <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" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" 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> 

编辑:

在res / values / dimens.xml下

 <resources> <!-- Default screen margins, per the Android Design guidelines. --> <dimen name="activity_horizontal_margin">16dp</dimen> <dimen name="activity_vertical_margin">16dp</dimen> </resources> 

考虑在对话框中使用微调器而不是数字选取器。 这并不是所要求的,但实现起来要容易得多,更多的上下文UIdevise,并且应该满足大多数用例。 Spinner的等效代码是:

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

一个简单的例子:

布局/ billing_day_dialog.xml

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <NumberPicker android:id="@+id/number_picker" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentRight="true" android:layout_alignParentTop="true" /> <Button android:id="@+id/apply_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentRight="true" android:layout_below="@+id/number_picker" android:text="Apply" /> </RelativeLayout> 

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:将活动的主题指定为对话主题。

 <activity android:name="org.npn.analytics.call.NumberPickerActivity" android:theme="@android:style/Theme.Holo.Dialog" android:label="@string/title_activity_number_picker" > </activity> 

希望它会有所帮助。

要在AlertDialog显示AlertDialog使用以下代码:

 final AlertDialog.Builder d = new AlertDialog.Builder(AddInviteActivity.this); 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

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center" android:gravity="center_horizontal"> <NumberPicker android:id="@+id/dialog_number_picker" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </LinearLayout>