it-swarm.asia

كيفية إنشاء مربع حوار منتقي الأرقام؟

أريد أن أكون قادرًا على إنشاء مربع حوار يسمح للمستخدم باختيار رقم من نطاق محدد.

أعلم أن هناك عناصر واجهة مستخدم حالية (مثل تلك التي تستخدم التشفير الهادئ وواحد من SimonVT) تقوم بذلك بالفعل ولكن أواجه صعوبة في دمج تلك الأدوات بشكل صحيح في طلبي. أيضا ، هذه هي الحاجيات في المقام الأول. أريد شيئًا مشابهًا جدًا لما هو موجود في البرامج التعليمية لصفحة مطوري Android.

لقد قمت أيضًا بالتحقق من الوثائق الخاصة بـ NumberPicker وقيل إنها تحقق من TimePicker و DatePicker للحصول على أمثلة ولكنهما يوضحان فقط كيفية استخدام منتقيي الوقت والتاريخ وأواجه صعوبة في الشعور بطريقتي حول الكود ومحاولة تحويل منتقي الوقت إلى مجرد منتقي أرقام عادي. هل لديها أي فكرة من أين تبدأ؟ لقد كنت أبحث عن حلول لآخر 3 ساعات دون جدوى.

64
Razgriz

لقد قدمت عرضًا تجريبيًا صغيرًا لـ 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>

تصحيح:

تحت الدقة/القيم/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>
97
Raghunandan

لإظهار 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>
14
Kapil Rajput

حاول استخدام Spinner بدلاً من "منتقي الأرقام" في مربع حوار. ليس بالضبط ما تم طلبه ، ولكن من الأسهل بكثير تنفيذ تصميم واجهة مستخدم أكثر سياقية ، ويجب أن تفي بمعظم حالات الاستخدام. الكود المكافئ لـ 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);
8
GLee

مثال بسيط:

تخطيط/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: حدد سمة للنشاط كموضوع حوار.

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

آمل أن يساعد.

5
NEERAJ SWARNKAR

لعشاق kotlin.

    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"/>
1
Bozzo Game