नंबर पिकर डायलॉग कैसे बनाएं?


79

मैं एक डायलॉग बनाने में सक्षम होना चाहता हूं जो उपयोगकर्ता को एक निर्दिष्ट सीमा से नंबर लेने की अनुमति देता है।

मुझे पता है कि मौजूदा विगेट्स हैं (जैसे कि साइलेंटकोडिंग से और साइमनवीटी द्वारा एक) जो पहले से ही ऐसा करता है, लेकिन मुझे अपने एप्लिकेशन में उन लोगों को ठीक से एकीकृत करने में कठिन समय आ रहा है। इसके अलावा, वे मुख्य रूप से विजेट हैं। मैं कुछ ऐसा चाहता हूं जो एंड्रॉइड डेवलपर्स पेज ट्यूटोरियल में एक के समान हो।

मैंने नंबरपिकर के लिए दस्तावेज़ीकरण की भी जाँच की और कहा कि उदाहरण के लिए TimePicker और DatePicker की जाँच करें, लेकिन वे केवल समय और दिनांक पिकर का उपयोग करने का तरीका दिखाते हैं और मुझे कोड के चारों ओर अपना रास्ता महसूस करने में मुश्किल समय आ रहा है और इसे बदलने की कोशिश कर रहा हूं। टाइम पिकर सिर्फ एक नॉर्मल नंबर पिकर के लिए। क्या किसी को कोई भी विचार है कि कहां से शुरू करें? मैं पिछले 3 घंटे से कोई फायदा नहीं हुआ है।


यदि आपको देखने के अनुकूलन की आवश्यकता नहीं है, तो setView()विधि का उपयोग AlertDialog.Builderकरना आसान और सरल है। यहाँ नमूना कोड है।
ली हान काइल

जवाबों:


118

मैंने नंबरपिकर का एक छोटा डेमो किया है। यह सही नहीं हो सकता है लेकिन आप उसी का उपयोग और संशोधित कर सकते हैं।

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>

संवाद .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 / मान / 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>

यह काम करता हैं। हालांकि, मेरा एक सवाल है, अगर मुझे उपयोगकर्ता को 2 नंबर चुनने की आवश्यकता है तो क्या होगा? क्या मैं दूसरे टेक्स्ट व्यू / वेरिएबल को दूसरा मान दे पाऊंगा?
रज़ग्रीज़

आप एक एकल पिकर का उपयोग कर सकते हैं और बूलियन सही या गलत का उपयोग करते हुए दूसरे टेक्स्टव्यू के लिए मान सेट कर सकते हैं। दो बीनने वालों की जरूरत नहीं। और खुशी हुई कि ऊपर वाले ने मदद की।
रघुनंदन

इसके अलावा, पिकर के xml पर पैडिंग कोड काम नहीं करता है। यह त्रुटि देता हैNo resource found that matches the given name (at 'paddingBottom' with value @dimen/activity_vertical_margin)
Razgriz

@ राजगृह उन मूल्यों का होना चाहिए dimens.xml। आप अपना खुद का बना सकते हैं। उन को हटा दें और अपना जोड़ें। मैं पूरे प्रोजेक्ट को पोस्ट नहीं कर सकता।
रघुनंदन

4
NumberPicker न्यूनतम 11 एपी है। निम्न एपीआई स्तरों के बारे में क्या?
एलिकेनब्यूरट

20

इस कोड का उपयोग करने के लिए दिखाने NumberPickerके AlertDialogलिए:

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>

3
LinearLayout यहाँ बेमानी है, है ना?
Miha_x64

9

डायलॉग में नंबर पिकर के बजाय स्पिनर का उपयोग करने पर विचार करें । यह बिल्कुल वैसा नहीं है जैसा कि पूछा गया था, लेकिन इसे लागू करना अधिक आसान है, अधिक प्रासंगिक यूआई डिज़ाइन, और अधिकांश उपयोग के मामलों को पूरा करना चाहिए। स्पिनर के लिए समान कोड है:

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);

प्रेफरेंस xml फ़ाइल में इस का उपयोग करने की कोशिश करने से यह मुद्रास्फीति पर दुर्घटनाग्रस्त हो जाता है
मैथ्यू मॉरोन

6

एक सरल उदाहरण:

लेआउट / बिलिंग_डे_डायलॉग.एक्सएलएम

<?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>

नंबरपिक्चर एक्टिविटी.जवा

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: संवाद थीम के रूप में गतिविधि के लिए विषय निर्दिष्ट करें।

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

आशा है कि यह मदद करेगा।


5

कोटलिन प्रेमियों के लिए।

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

और 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"/>

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.