web-dev-qa-db-fra.com

Boîte de dialogue de sélection de date et heure

Je souhaite créer une boîte de dialogue permettant de sélectionner simultanément heure et date.
Je sais que il n’existe pas de widget par défaut capable de le faire sous Android . Je sais aussi qu’il existe des projets open source sur la façon dont le personnel est similaire. Le problème dans ce projet est que dans la boîte de dialogue nous avons deux boutons: datePicker et timePicker.

enter image description here

Et ce n'est pas ce que je veux faire - je veux que le sélecteur de date et d'heure apparaisse en même temps.
Donc, je pense que les deux problèmes principaux seront:

  1. Commencez par faire apparaître le sélecteur d’heure et de date dans la même boîte de dialogue.
  2. Et le deuxième problème sera de changer l'apparence du sélecteur d'heure et de date (la couleur orange).

Le premier problème a été résolu par Bhavesh. Voici ce que je reçois:

enter image description here

Le problème maintenant est que je veux changer tous les couleur de la barre bleue en en orange.
J'ai ajouté Android:calendarViewShown="false" pour supprimer le calendrier à droite :) Merci Bhavesh et j'ai changé le thème en HOLO
Voici ce que je reçois:

enter image description here

Vous pouvez télécharger le code (c'est le mieux que je puisse faire). Vous pouvez télécharger depuis ici .

51
haythem souissi

Faites d'abord apparaître le sélecteur d'heure et de date dans la même boîte de dialogue

Ici, je peux vous aider: vous pouvez créer une mise en page composée d'une DatePicker et d'une TimePicker dans une LinearLayout avec une orientation définie à la verticale.

custom_dialog.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/linearLayout1"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:orientation="vertical" >

    <DatePicker
         Android:id="@+id/datePicker1"
         Android:layout_width="wrap_content"
         Android:layout_height="wrap_content" >
    </DatePicker>

    <TimePicker
        Android:id="@+id/timePicker1"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content" >
    </TimePicker>

</LinearLayout>

Ensuite, utilisez cette mise en page pour créer votre dialogue.

Dialog dialog = new Dialog(mContext);

dialog.setContentView(R.layout.custom_dialog);
dialog.setTitle("Custom Dialog");

Pour réagir à l’interaction de l’utilisateur avec votre TimePicker, procédez comme suit:

TimePicker tp = (TimePicker)dialog.findViewById(R.id.timepicker1);
tp.setOnTimeChangedListener(myOnTimechangedListener);

Pour obtenir les valeurs de DatePicker et Date lorsque l'utilisateur a fini de les définir, ajoutez un bouton OK dans votre boîte de dialogue, puis lisez les valeurs de date et d'heure dans DatePicker et Date lorsque l'utilisateur appuie sur OK.

Pour créer quelque chose qui ressemble exactement à celui de vos captures d’écran, je vous recommande de personnaliser toutes les choses avec votre propre logique.

77
Bhavesh Patadiya

Pour changer les couleurs de la barre bleue, essayez ce qui suit.

Définissez votre propre thème comme suit, ce qui étend THEME_HOLO_DARK. 

Essayez comme suit: -

<style name="testo" parent="@Android:style/Widget.DeviceDefault.DatePicker">
    <item name="Android:divider">@drawable/MyDivider</item>
</style>

Vérifiez les éléments suivants change-basic-theme-color-of-Android-application

2
Harish

Il y a beaucoup de solutions disponibles il y en a une, j'aime cette méthode simple:

String mDateTime;
void getDateTime(){
    final Calendar c = Calendar.getInstance();
    int year = c.get(Calendar.YEAR);
    int month = c.get(Calendar.MONTH);
    int day = c.get(Calendar.DAY_OF_MONTH);
    final int hour = c.get(Calendar.HOUR_OF_DAY);
    final int minute = c.get(Calendar.MINUTE);
    mDateTime = "";
    new DatePickerDialog(
            mContext, new DatePickerDialog.OnDateSetListener() {
        @Override
        public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
            mDateTime =  year +"-"+  month +"-"+ dayOfMonth;
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    new TimePickerDialog(mContext, new TimePickerDialog.OnTimeSetListener() {
                        @Override
                        public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
                            mDateTime+=" "+hourOfDay+":"+minute;
                        }
                    }, hour, minute, false).show();
                }
            },500);
        }
    }, year, month, day).show();
}
0
Md Imran Choudhury