Ich möchte in der Lage sein, einen Dialog zu erstellen, in dem der Benutzer eine Zahl aus einem bestimmten Bereich auswählen kann.
Ich weiß, dass es bereits Widgets gibt (wie die von Silentcoding und das von SimonVT), die dies bereits tun, aber es fällt mir schwer, diese ordnungsgemäß in meine Anwendung zu integrieren. Dies sind auch hauptsächlich Widgets. Ich möchte etwas, das dem in den Tutorials auf der Android-Entwicklerseite sehr ähnlich ist.
Ich habe auch die Dokumentation für den NumberPicker überprüft und es wurde gesagt, dass der TimePicker und der DatePicker auf Beispiele überprüft werden sollen, aber sie zeigen nur, wie man Zeit- und Datumsauswahl verwendet, und es fällt mir schwer, mich im Code zurechtzufinden und zu versuchen, den Code zu konvertieren Time Picker zu einem normalen Number Picker. Hat jemand eine Idee, wo ich anfangen soll? Ich habe in den letzten 3 Stunden erfolglos nach Lösungen gesucht.
setView()
Methode vonAlertDialog.Builder
einfacher und einfacher. Hier ist der Beispielcode.Antworten:
Ich habe eine kleine Demo von NumberPicker gemacht. Dies ist möglicherweise nicht perfekt, aber Sie können es verwenden und ändern.
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>
Bearbeiten:
unter res / values / dimension.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>
quelle
No resource found that matches the given name (at 'paddingBottom' with value @dimen/activity_vertical_margin)
dimens.xml
. Sie können Ihre eigenen erstellen. Entfernen Sie diese und fügen Sie Ihre eigenen hinzu. Ich kann nicht das ganze Projekt posten.Um zu zeigen ,
NumberPicker
inAlertDialog
diesen Code verwenden: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
<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>
quelle
Verwenden Sie in einem Dialogfeld einen Spinner anstelle eines Nummernwählers. Es ist nicht genau das, wonach gefragt wurde, aber es ist viel einfacher zu implementieren, kontextbezogener zu gestalten und sollte die meisten Anwendungsfälle erfüllen. Der entsprechende Code für einen Spinner lautet:
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);
quelle
Ein einfaches Beispiel:
layout / 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 i.e 1 np.setMaxValue(31);// restricked number to maximum value i.e. 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: Geben Sie das Thema für die Aktivität als Dialogthema an.
<activity android:name="org.npn.analytics.call.NumberPickerActivity" android:theme="@android:style/Theme.Holo.Dialog" android:label="@string/title_activity_number_picker" > </activity>
Hoffe es wird helfen.
quelle
Für Kotlin-Liebhaber.
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<NumberPicker>(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() }
und 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"/>
quelle