दिलचस्प पोस्ट
विभिन्न डिवाइसों के लिए मेरे ओपन के उत्पादन अलग-अलग क्यों हैं? एसक्यूएल, कैसे परिणाम संमिलित करने के लिए? सी में atoi () का उपयोग करते हुए मुझे यह अनपेक्षित परिणाम क्यों मिलता है? स्प्लिट स्ट्रिंग, एक पंक्ति में ToList <int> () को कनवर्ट करें uiview की सीमा से परे बातचीत सृजन क्रमशः मैं सीएसएस का उपयोग कर दूसरे बच्चे को कैसे प्राप्त करूं? Xcode: सादा भाषा में एक लक्ष्य और योजना क्या है? मैं जावास्क्रिप्ट के जरिए एक क्रॉस-डोमेन POST अनुरोध कैसे भेजूं? सिद्धांत 2 में एक और पंक्ति के रूप में इकाई को फिर से कैसे सहेजना है मैं अपने एचटीएमएल कैनवास में धूमिल पाठ कैसे ठीक करूं? ITunesConnect से ऐप कैसे हटाएं उपयोगकर्ता नियंत्रण से पैरेंट पृष्ठ में एक विधि कॉलिंग ग्रहण सफलतापूर्वक संकलित करता है लेकिन अभी भी अर्थ त्रुटियाँ देता है निर्माता विरासत क्या है?

Android में मिनट के अंतराल के साथ टाइमपाकर दिखाएं

मेरा एप्लिकेशन एक समय सेट करने के लिए एक टाइम पिक्चर डाइलॉग दिखाता है मैं चाहता हूं कि समय पिक्चर डाइलाग 5 मिनट के अंतराल के साथ मिनट दिखाए।

यह इस कोड के साथ ठीक काम करता है:

private final int TIME_PICKER_INTERVAL=5; private boolean mIgnoreEvent=false; … public TimePickerDialogs(Context arg0, OnTimeSetListener callBack, int hourOfDay, int minute, boolean is24HourView) { super(arg0, callBack, hourOfDay, minute, is24HourView); formato=Statics.formato; } @Override public void onTimeChanged(TimePicker view, int hourOfDay, int minute) { //super.onTimeChanged(arg0, arg1, arg2); if (mIgnoreEvent) return; if (minute%TIME_PICKER_INTERVAL!=0){ int minuteFloor=minute-(minute%TIME_PICKER_INTERVAL); minute=minuteFloor + (minute==minuteFloor+1 ? TIME_PICKER_INTERVAL : 0); if (minute==60) minute=0; mIgnoreEvent=true; view.setCurrentMinute(minute); mIgnoreEvent=false; } } 

हालांकि पांच मिनट के अंतराल के साथ ही कुछ ही मिनटों का चयन किया जा सकता है, लेकिन टाइमपेक्सायरडियलोग ऐसा दिखता है:

घंटे और मिनट

पता नहीं कैसे मिनट भी 5 मिनट की रेंज को दिखाते हैं, जैसा कि इस तस्वीर में है:

घंटे और मिनट - 5

मैंने खोज की है लेकिन समाधान नहीं मिल सकता है

Solutions Collecting From Web of "Android में मिनट के अंतराल के साथ टाइमपाकर दिखाएं"

CustomTimePickerDialog नामक कस्टम क्लास का उपयोग करें, जो मुझे लगता है कि आपकी समस्या को हल करें।

 import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; import android.app.TimePickerDialog; import android.content.Context; import android.content.DialogInterface; import android.widget.NumberPicker; import android.widget.TimePicker; public class CustomTimePickerDialog extends TimePickerDialog { private final static int TIME_PICKER_INTERVAL = 5; private TimePicker mTimePicker; private final OnTimeSetListener mTimeSetListener; public CustomTimePickerDialog(Context context, OnTimeSetListener listener, int hourOfDay, int minute, boolean is24HourView) { super(context, TimePickerDialog.THEME_HOLO_LIGHT, null, hourOfDay, minute / TIME_PICKER_INTERVAL, is24HourView); mTimeSetListener = listener; } @Override public void updateTime(int hourOfDay, int minuteOfHour) { mTimePicker.setCurrentHour(hourOfDay); mTimePicker.setCurrentMinute(minuteOfHour / TIME_PICKER_INTERVAL); } @Override public void onClick(DialogInterface dialog, int which) { switch (which) { case BUTTON_POSITIVE: if (mTimeSetListener != null) { mTimeSetListener.onTimeSet(mTimePicker, mTimePicker.getCurrentHour(), mTimePicker.getCurrentMinute() * TIME_PICKER_INTERVAL); } break; case BUTTON_NEGATIVE: cancel(); break; } } @Override public void onAttachedToWindow() { super.onAttachedToWindow(); try { Class<?> classForid = Class.forName("com.android.internal.R$id"); Field timePickerField = classForid.getField("timePicker"); mTimePicker = (TimePicker) findViewById(timePickerField.getInt(null)); Field field = classForid.getField("minute"); NumberPicker minuteSpinner = (NumberPicker) mTimePicker .findViewById(field.getInt(null)); minuteSpinner.setMinValue(0); minuteSpinner.setMaxValue((60 / TIME_PICKER_INTERVAL) - 1); List<String> displayedValues = new ArrayList<>(); for (int i = 0; i < 60; i += TIME_PICKER_INTERVAL) { displayedValues.add(String.format("%02d", i)); } minuteSpinner.setDisplayedValues(displayedValues .toArray(new String[displayedValues.size()])); } catch (Exception e) { e.printStackTrace(); } } } 

यहाँ प्रदर्शन स्क्रीनशॉट है

यहां छवि विवरण दर्ज करें

इस अद्भुत पुस्तकालय MaterialDateTimePicker है जो खूबसूरत स्टाइल सामग्री वाले टाइपेककर्स बनाता है।

आप अपना अंतराल निर्धारित करने के लिए निम्न विधियों में से एक का उपयोग कर सकते हैं:

  • सेट सेलेबल टाइम्स (टाइमपॉइंट [] बार) आप टाइमपॉइंट की एक सरणी में पास कर सकते हैं। इन मूल्यों में ही एकमात्र वैध चयन पिकर में हैं सेटमिनटाइम (टाइमपेक टाइम) और सेटमैक्सटाइम (टाइमपेक टाइम) इस सूची को नीचे ट्रिम कर देगा।

  • setTimeInterval (int hourInterval, int minuteInterval, int secondInterval) TimePickerDialog में चयन करने योग्य समय के लिए अंतराल सेट करें यह सेट के आसपास एक सुविधा आवरण है

जैसा कि @ एंडएव 84 ने कहा, आप इसे अपने स्वयं के अनुकूलित टाइम पिक्चर डायलॉग के साथ कर सकते हैं

हालांकि, आप पा सकते हैं स्रोत कोड की एक नज़र डालें:

  1. TimePickerDialog एक फ्रेम लेआउट है, यह फ़ाइल देखें। और इसमें सिर्फ एक टाइम पिक्चर शामिल है
  2. टाइमपीकर विजेट सिर्फ एक रैखिक लेआउट है, यह फ़ाइल देखें। और आप देख सकते हैं कि मिनट स्पिनर एक नंबर पिक्चर है
  3. NumberPicker के कोड को देखें , आपको पता चल जाएगा कि इसकी एक सार्वजनिक विधि सेट की गई है वैल्यू (स्ट्रिंग [] प्रदर्शित वैल्यू)

     /** * Sets the values to be displayed. * * @param displayedValues The displayed values. */ public void setDisplayedValues(String[] displayedValues) 

इसलिए, इन सूचनाओं के साथ, मुझे लगता है कि आप सीमित समय के साथ अपने खुद के समय पिकर संवाद को आसानी से अनुकूलित कर सकते हैं।

TimePickerDialog के लिए कोड को TimePickerDialog , यह प्रकट नहीं होता कि वे आपको उपयोगकर्ता को दिखाए जाने से पहले TimePicker को सीधे संशोधित करने का एक तरीका देते हैं और आपको चित्र में "गलत मिनट" दिखाई देते हैं। TimePickerDialog.java देखें

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

  1. इस तरह आप कार्यान्वयन को अनुकूलित कर सकते हैं, लेकिन आप चाहते हैं, जिसमें मिनट के लिए प्रदर्शित करने के लिए TimePicker मूल्यों को आरंभ करना (जैसा कि यहां बताया गया है ), और भी
  2. यह वास्तव में बहुत मुश्किल नहीं होना चाहिए, एंड्रॉइड टाइम पिक्चर डाइलाॉग। जावा ही 160 लाइनें हैं, बहुत ही प्रबंधनीय है।

मैंने उपरोक्त उत्कृष्ट स्वीकार किए गए उत्तर के लिए एक जोड़ दिया है। इसके साथ समस्या यह है कि एंड्रॉइड के कम से कम कुछ संस्करणों में, जब आप चुने गए समय को बदलते हैं, तो यह एक गलत समय मान के साथ डायलॉग शीर्षक को बदल देगा। आप अपमानजनक विधि, updateTitle () को ओवरराइड नहीं कर सकते, लेकिन आप समय पर कॉलिंग को अवरुद्ध कर सकते हैं () और या तो सुपर कॉल नहीं करते हैं या इसे निश्चित तर्कों के साथ कॉल करते हैं।

मैंने इसे बंद कर दिया है कि setTitle () विधि को गैर-शून्य स्ट्रिंग आईडी के साथ बुलाया गया था, लेकिन आप बुलियन के लिए या जो कुछ भी प्राप्त कर सकते हैं

 @Override public void onTimeChanged(TimePicker view, int hourOfDay, int minute) { if (autoTitle) { // Super will call a private updateTitle() method, so lets make // sure it has the right minute value. super.onTimeChanged(view, hourOfDay, minute * TIME_PICKER_INTERVAL); } else { // do nothing } } @Override public void setTitle(int id) { super.setTitle(id); autoTitle = (id == 0); } ... private boolean autoTitle = true; 

30 मिनट की अंतराल के साथ संघर्ष किया गया और फिर घंटे। अधिक संघर्ष कर सकते हैं यदि @ ली की टिप्पणी नहीं देखेंगे तो बस 30 मिनट के अंतराल के साथ संवाद का पूर्ण कोड पोस्ट करें:

 public class IntervalTimePickerDialog extends TimePickerDialog { private static final String TAG = "IntervalPickerDialog"; private final static int TIME_PICKER_INTERVAL = 30; private TimePicker timePicker; private final OnTimeSetListener callback; private int lastHour = -1; private int lastMinute = -1; public IntervalTimePickerDialog(Context context, int themeId, OnTimeSetListener callBack, int hourOfDay, int minute, boolean is24HourView) { super(context, themeId, callBack, hourOfDay, minute / TIME_PICKER_INTERVAL, is24HourView); lastHour = hourOfDay; lastMinute = minute; this.callback = callBack; } @Override public void onClick(DialogInterface dialog, int which) { if (callback != null && timePicker != null) { timePicker.clearFocus(); callback.onTimeSet(timePicker, timePicker.getCurrentHour(), timePicker.getCurrentMinute() * TIME_PICKER_INTERVAL); } } @Override protected void onStop() { } @Override public void onAttachedToWindow() { super.onAttachedToWindow(); try { Class<?> classForid = Class.forName("com.android.internal.R$id"); Field timePickerField = classForid.getField("timePicker"); this.timePicker = (TimePicker) findViewById(timePickerField.getInt(null)); Field field = classForid.getField("minute"); NumberPicker mMinuteSpinner = (NumberPicker) timePicker.findViewById(field.getInt(null)); mMinuteSpinner.setMinValue(0); mMinuteSpinner.setMaxValue((60 / TIME_PICKER_INTERVAL) - 1); List<String> displayedValues = new ArrayList<>(); for (int i = 0; i < 60; i += TIME_PICKER_INTERVAL) { displayedValues.add(String.format("%02d", i)); } mMinuteSpinner.setDisplayedValues(displayedValues.toArray(new String[0])); } catch (Exception e) { e.printStackTrace(); } } @Override public void onTimeChanged(TimePicker view, int hourOfDay, int minute) { super.onTimeChanged(view, hourOfDay, minute); if (lastHour != hourOfDay && lastMinute != minute) { view.setCurrentHour(lastHour); lastMinute = minute; } else { lastHour = hourOfDay; lastMinute = minute; } } 

उपरोक्त उत्तर एंड्रॉइड के पुराने संस्करण के लिए वास्तव में ठीक काम करता है, लेकिन यह एंड्रॉइड 7 नोगाट में मेरे लिए काम नहीं करता है, मूल रूप से डेट पिकर पूरी तरह से क्लॉक मोड का उपयोग करने के लिए बदल जाता है … : //gist.github.com/jeffdgr8/6bc5f990bf0c13a7334ce385d482af9f , फिर इसे स्पिनर नियंत्रण दिखाने के लिए TimePickerDialog का मोड डिफ़ॉल्ट रूप से सेट किया गया है, और यह मेरे मामले में केवल 15 मिनट के अंतराल को दिखाने के लिए कोड चलाता है।

कोड यहां पोस्ट किया गया है https://gist.github.com/smaugho/14dae83f3284fa05455ee0a9e4f13099

 public class CustomTimePickerDialog extends TimePickerDialog { private final static int TIME_PICKER_INTERVAL = 15; private TimePicker timePicker; private final OnTimeSetListener callback; public HorekoTimePicker(Context context, OnTimeSetListener callBack, int hourOfDay, int minute, boolean is24HourView) { super(context, callBack, hourOfDay, minute/TIME_PICKER_INTERVAL, is24HourView); this.callback = callBack; fixSpinner(context, hourOfDay, minute, is24HourView); } /** * Workaround for this bug: https://code.google.com/p/android/issues/detail?id=222208 * In Android 7.0 Nougat, spinner mode for the TimePicker in TimePickerDialog is * incorrectly displayed as clock, even when the theme specifies otherwise, such as: * * <resources> * <style name="Theme.MyApp" parent="Theme.AppCompat.Light.NoActionBar"> * <item name="android:timePickerStyle">@style/Widget.MyApp.TimePicker</item> * </style> * * <style name="Widget.MyApp.TimePicker" parent="android:Widget.Material.TimePicker"> * <item name="android:timePickerMode">spinner</item> * </style> * </resources> * * May also pass TimePickerDialog.THEME_HOLO_LIGHT as an argument to the constructor, * as this theme has the TimePickerMode set to spinner. * * Taken from: https://gist.github.com/jeffdgr8/6bc5f990bf0c13a7334ce385d482af9f */ private void fixSpinner(Context context, int hourOfDay, int minute, boolean is24HourView) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { // android:timePickerMode spinner and clock began in Lollipop try { // Get the theme's android:timePickerMode final int MODE_SPINNER = 1; Class<?> styleableClass = Class.forName("com.android.internal.R$styleable"); Field timePickerStyleableField = styleableClass.getField("TimePicker"); int[] timePickerStyleable = (int[]) timePickerStyleableField.get(null); final TypedArray a = context.obtainStyledAttributes(null, timePickerStyleable, android.R.attr.timePickerStyle, 0); Field timePickerModeStyleableField = styleableClass.getField("TimePicker_timePickerMode"); int timePickerModeStyleable = timePickerModeStyleableField.getInt(null); final int mode = a.getInt(timePickerModeStyleable, MODE_SPINNER); a.recycle(); if (mode == MODE_SPINNER) { timePicker = (TimePicker) findField(TimePickerDialog.class, TimePicker.class, "mTimePicker").get(this); Class<?> delegateClass = Class.forName("android.widget.TimePicker$TimePickerDelegate"); Field delegateField = findField(TimePicker.class, delegateClass, "mDelegate"); Object delegate = delegateField.get(timePicker); Class<?> spinnerDelegateClass; if (Build.VERSION.SDK_INT != Build.VERSION_CODES.LOLLIPOP) { spinnerDelegateClass = Class.forName("android.widget.TimePickerSpinnerDelegate"); } else { // TimePickerSpinnerDelegate was initially misnamed TimePickerClockDelegate in API 21! spinnerDelegateClass = Class.forName("android.widget.TimePickerClockDelegate"); } // In 7.0 Nougat for some reason the timePickerMode is ignored and the delegate is TimePickerClockDelegate if (delegate.getClass() != spinnerDelegateClass) { delegateField.set(timePicker, null); // throw out the TimePickerClockDelegate! timePicker.removeAllViews(); // remove the TimePickerClockDelegate views Constructor spinnerDelegateConstructor = spinnerDelegateClass.getConstructor(TimePicker.class, Context.class, AttributeSet.class, int.class, int.class); spinnerDelegateConstructor.setAccessible(true); // Instantiate a TimePickerSpinnerDelegate delegate = spinnerDelegateConstructor.newInstance(timePicker, context, null, android.R.attr.timePickerStyle, 0); delegateField.set(timePicker, delegate); // set the TimePicker.mDelegate to the spinner delegate // Set up the TimePicker again, with the TimePickerSpinnerDelegate timePicker.setIs24HourView(is24HourView); timePicker.setCurrentHour(hourOfDay); timePicker.setCurrentMinute(minute); timePicker.setOnTimeChangedListener(this); } setTimeIntervals(); } } catch (Exception e) { throw new RuntimeException(e); } } } private static Field findField(Class objectClass, Class fieldClass, String expectedName) { try { Field field = objectClass.getDeclaredField(expectedName); field.setAccessible(true); return field; } catch (NoSuchFieldException e) {} // ignore // search for it if it wasn't found under the expected ivar name for (Field searchField : objectClass.getDeclaredFields()) { if (searchField.getType() == fieldClass) { searchField.setAccessible(true); return searchField; } } return null; } @Override protected void onStop() { } /* * Feature #363: (Un)availability times in 15min interval * https://abix.webhop.net/redmine/issues/363 * Solution extracted from * http://stackoverflow.com/questions/20214547/show-timepicker-with-minutes-intervals-in-android */ @Override public void onClick(DialogInterface dialog, int which) { super.onClick(dialog, which); if (callback != null && timePicker != null) { timePicker.clearFocus(); callback.onTimeSet(timePicker, timePicker.getCurrentHour(), timePicker.getCurrentMinute()*TIME_PICKER_INTERVAL); } } private void setTimeIntervals() { try { Class<?> classForid = Class.forName("com.android.internal.R$id"); Field field = classForid.getField("minute"); NumberPicker mMinuteSpinner = (NumberPicker) timePicker.findViewById(field.getInt(null)); mMinuteSpinner.setMinValue(0); mMinuteSpinner.setMaxValue((60 / TIME_PICKER_INTERVAL) - 1); List<String> displayedValues = new ArrayList<String>(); for (int i = 0; i < 60; i += TIME_PICKER_INTERVAL) { displayedValues.add(String.format("%02d", i)); } mMinuteSpinner.setDisplayedValues(displayedValues.toArray(new String[0])); } catch (Exception e) { e.printStackTrace(); } } 

}

 /** * Set TimePicker interval by adding a custom minutes list * * @param timePicker */ private void setTimePickerInterval(TimePicker timePicker) { try { NumberPicker minutePicker = (NumberPicker) timePicker.findViewById(Resources.getSystem().getIdentifier( "minute", "id", "android")); minutePicker.setMinValue(0); minutePicker.setMaxValue((60 / TIME_PICKER_INTERVAL) - 1); List<String> displayedValues = new ArrayList<String>(); for (int i = 0; i < 60; i += TIME_PICKER_INTERVAL) { displayedValues.add(String.format("%02d", i)); } minutePicker.setDisplayedValues(displayedValues.toArray(new String[0])); } catch (Exception e) { Log.e(TAG, "Exception: " + e); } } 

ऊपर दिखाए गए तन्मय मंडल के जवाब के आधार पर, मैंने टाइमपीकर विजेट के लिए एक समाधान लागू किया है (टाइमपीकरडायलोग नहीं)। यहां की चाल, हमारे कस्टम टाइम पिक्चर को प्रोग्रामेटिक रूप से जोड़ने के लिए, एक LinearLayout तत्व के लिए गतिविधि के लेआउट में मूल टाइमपाकर तत्व को स्थानांतरित करना है। नीचे दिए गए उदाहरण देखें:

 import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; import android.content.Context; import android.widget.NumberPicker; import android.widget.TimePicker; public class MyTimePicker extends TimePicker { private static final int TIME_PICKER_INTERVAL = 5; public MyTimePicker(Context context) { super(context); } @Override public Integer getCurrentMinute() { return super.getCurrentMinute()*TIME_PICKER_INTERVAL; } @Override protected void onAttachedToWindow() { super.onAttachedToWindow(); try { Class<?> classForid = Class.forName("com.android.internal.R$id"); Field field = classForid.getField("minute"); NumberPicker mMinuteSpinner = (NumberPicker) findViewById(field.getInt(null)); mMinuteSpinner.setMinValue(0); mMinuteSpinner.setMaxValue((60 / TIME_PICKER_INTERVAL) - 1); List<String> displayedValues = new ArrayList<String>(); for (int i = 0; i < 60; i += TIME_PICKER_INTERVAL) displayedValues.add(String.format("%02d", i)); mMinuteSpinner.setDisplayedValues(displayedValues.toArray(new String[0])); } catch (Exception e) { e.printStackTrace(); } } } 

और हमारी गतिविधि के लिए:

  @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); LinearLayout ll = (LinearLayout) findViewById(R.id.myLinearLayout); ll.removeAllViews(); MyTimePicker tp = new MyTimePicker(this); tp.setIs24HourView(true); Calendar cal = Calendar.getInstance(); // Current time tp.setCurrentHour(cal.get(Calendar.HOUR_OF_DAY)); tp.setCurrentMinute(cal.get(Calendar.MINUTE)/5); // Aprox current minute ll.addView(tp); } 

अगर आप एंड्रॉइड 5+ में एक ही समय पिकर (न घड़ी की घड़ी) संवाद का उपयोग करने के लिए अभ्यस्त हैं, तो थीम को बदल दें। आप सीधे कन्स्ट्रक्टर में बदल सकते हैं:

  public CustomTimePickerDialog(Context context, OnTimeSetListener callBack, int hourOfDay, int minute, boolean is24HourView, int time_interval) { super(context, TimePickerDialog.THEME_HOLO_LIGHT, callBack, hourOfDay, minute / time_interval, is24HourView); this.TIME_PICKER_INTERVAL = time_interval; this.callback = callBack; }