2010-09-16 25 views
8

Sto provando a implementare qualcosa come un timer per il conto alla rovescia che suona un allarme a 0. Voglio essere in grado di impostare il tempo di attesa prima che il timer si spenga e I ' Mi chiedo se c'è un widget o un elemento dell'interfaccia utente che fornisce questo tipo di funzionalità di selezione.selezionatore di ore/minuti per conto alla rovescia Android

Fondamentalmente, Android ha qualcosa come la ruota girevole di selezione dell'iPhone? O c'è qualche tipo di timepicker che consente la selezione di un numero arbitrario di ore e minuti? Il widget di timepicker in Android ha un'etichetta AM/PM non necessaria.

Devo implementare la mia interfaccia utente personalizzata per raggiungere questo obiettivo?

risposta

1

Sì, puoi hackerarne uno insieme. È una possibilità distinta che questo codice avrà una vita breve a causa di cambiamenti nell'API.

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

e poi cadere un paio di questi nel layout:

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

setCurrent di serie l'indice del selettore, che nel caso di foo, un valore di "$ 07". setRange imposta i valori da visualizzare nel selettore.

Buona fortuna.

+0

ciò che è "stato"? – pengwang

+0

pengwang, spero che la modifica chiarisca le cose. fammi sapere se non è così. –

9

È possibile utilizzare l'impostazione predefinita TimePickerDialog e l'override del metodo onTimeChanged per aggiornare il titolo da soli:

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

Sto usando samsung s3. Dopo aver fatto clic sul pulsante set, il tempo è stato impostato e la finestra di dialogo è stata chiusa ma non si è più mostrata, ma se si fa clic sul pulsante Annulla la finestra di dialogo funziona correttamente. – Deepak

+0

Per quanto posso dire questo non consentirà un'impostazione di oltre 24 ore di durata. –

Problemi correlati