2010-09-16 32 views
8

J'essaie de mettre en œuvre quelque chose comme un compte à rebours qui joue une alarme à 0. Je veux être en mesure de fixer le délai d'attente avant que la minuterie s'éteigne et je Je me demande s'il y a un widget ou un élément d'interface utilisateur qui fournit ce type de fonctionnalité de sélection.sélecteur heure/minute pour le compte à rebours android

Fondamentalement, est-ce que Android a quelque chose comme la molette de sélection de l'iPhone? Ou y a-t-il un certain type de timepicker qui permet la sélection d'un nombre arbitraire d'heures et de minutes? Le widget timepicker dans Android a une étiquette AM/PM inutile. Dois-je implémenter ma propre interface utilisateur personnalisée pour y parvenir?

Répondre

1

Oui, vous pouvez en pirater un ensemble. Il est fort possible que ce code ait une durée de vie limitée en raison de changements dans l'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); 

Et puis déposez quelques ceux-ci dans votre mise en page:

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

l'index de jeu de setCurrent du sélecteur qui, dans le cas de foo signifie une valeur de « 07 $ ». setRange définit les valeurs à afficher dans le sélecteur.

Bonne chance.

+0

ce qui est « Etat »? – pengwang

+0

pengwang, j'espère que l'édition clarifie les choses. laissez-moi savoir si ce n'est pas le cas. –

9

Vous pouvez utiliser la valeur par défaut TimePickerDialog et remplacer la méthode onTimeChanged de mettre à jour le titre vous:

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

J'utilise samsung s3. Après avoir cliqué sur le bouton définir l'heure a été définie et la boîte de dialogue rejeter mais ne plus jamais afficher, mais si je clique sur le bouton Annuler le dialogue fonctionne bien. – Deepak

+0

Autant que je sache, cela ne permettra pas un réglage de plus de 24 heures. –