2010-09-16 7 views
8

Ich versuche, etwas wie ein Countdown-Timer, der einen Alarm bei 0 spielt. Ich möchte in der Lage sein, die Menge an Zeit zu warten, bevor der Timer abläuft und ich ' Ich frage mich, ob es ein UI-Widget oder -Element gibt, das diese Art von Auswahlfunktionalität bietet.Stunde/Minute Picker für Android-Countdown-Timer

Im Grunde, hat Android so etwas wie die Auswahl des iPhones Spinwheel? Oder gibt es einen Typ von Zeitpicker, der die Auswahl einer beliebigen Anzahl von Stunden und Minuten erlaubt? Das Timepicker-Widget in Android hat ein unnötiges AM/PM-Label.

Muss ich meine eigene benutzerdefinierte Benutzeroberfläche implementieren, um dies zu erreichen?

Antwort

1

Ja, Sie können einen zusammen hacken. Es ist eine deutliche Möglichkeit, dass dieser Code aufgrund von Änderungen in der API eine kurze Lebensdauer hat.

int foo = 7; 
Object o = findViewById(ids[i]); 
Class<? extends Object> c = o.getClass(); 
Method m = c.getMethod("setCurrent", int.class); 
m.invoke(o, foo); 

String[] displayedValues = new String[] { "$00", "$01", "$02", "$03", "$04", 
         "$05", "$06", "$07", "$08", "$09", "$10", "$11", 
         "$12", "$13", "$14", "$15", "$16", "$17", "$18", "$19", "$20", "$21", 
         "$22", "$23", "$24", "$25"}; 
Method m = c.getMethod("setRange", int.class, int.class, String[].class); 
M.invoke(o, 0, 25, displayedValues); 

Und dann ein paar von ihnen in Ihrem Layout fällt:

<com.android.internal.widget.NumberPicker 
android:id="@+id/picker1" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_alignParentLeft="true" /> 

setCurrent-Set des Index des Picker, die im Fall von foo einen Wert von "$ 07" bedeutet. setRange legt die Werte fest, die in der Auswahl angezeigt werden sollen.

Viel Glück.

+0

was „Zustand“ ist? – pengwang

+0

pengwang, ich hoffe, dass Edit klärt die Dinge. lass es mich wissen, wenn es nicht so ist. –

9

Sie können den Standard TimePickerDialog verwenden und die onTimeChanged Methode überschreiben, um den Titel zu aktualisieren, selbst:

public class DurationPickerDialog extends TimePickerDialog { 

    public DurationPickerDialog(Context context, int theme, 
     OnTimeSetListener callBack, int hour, int minute) { 
     super(context, theme, callBack, hour, minute, true); 
     updateTitle(hour, minute); 
    } 

    public DurationPickerDialog(Context context, OnTimeSetListener callBack, 
     int hour, int minute) { 
     super(context, callBack, hour, minute, true); 
     updateTitle(hour, minute); 
    } 

    @Override 
    public void onTimeChanged(TimePicker view, int hour, int minute) { 
     super.onTimeChanged(view, hour, minute); 
     updateTitle(hour, minute); 
    } 

    public void updateTitle(int hour, int minute) { 
     setTitle("Duration: " + hour + ":" + formatNumber(minute)); 
    } 

    private String formatNumber(int number) { 
     String result = ""; 
     if (number < 10) { 
      result += "0"; 
     } 
     result += number; 

     return result; 
    } 
} 
+1

Ich benutze Samsung s3. Nach dem Klick auf den Button wurde die Zeit eingestellt und der Dialog wurde geschlossen, aber nie wieder angezeigt, aber wenn ich auf "Abbrechen" klicke, klappte der Dialog gut. – Deepak

+0

Soweit ich sagen kann dies eine Einstellung von mehr als 24 Stunden nicht erlauben. –