52 votes

Dialogue du sélecteur de date et d'heure

Je veux créer un dialogue qui permet de sélectionner l'heure et la date en même temps.

Je sais qu'il n'y a pas de widget par défaut qui peut faire cela sur Android : http://stackoverflow.com/a/2056819/833219

Je sais aussi qu'il y a quelques projets open source qui font du personnel similaire : http://code.google.com/p/datetimepicker/ Le problème dans ce projet est que dans le dialogue, nous avons deux boutons : le bouton datePicker et le bouton 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 principaux problèmes seront : D'abord faire apparaître le sélecteur d'heure et de date dans la même boîte de dialogue. Et le second problème sera de changer l'apparence des sélecteurs d'heure et de date (la couleur orange). Le premier problème a été résolu par Bhavesh. Voici ce que j'obtiens :

enter image description here

Le problème maintenant est que je veux changer la couleur des barres bleues en couleur orange.

J'ai ajouté Android:calendarViewShown="false" pour supprimer le calendrier à droite :) Merci Bhavesh et j'ai changé le thème pour HOLO

Voici ce que j'obtiens :

enter image description here

Vous pouvez télécharger le code (c'est le mieux que je puisse faire). Vous pouvez le télécharger à partir d'ici : http://www.filefactory.com/file/6mf3bl0alkhf/n/DateTimePicker_zip

0 votes

Comment obtenez-vous l'image ci-dessus, pouvez-vous s'il vous plaît partager le code ici ?

0 votes

@haythem J'utilise mon thème personnalisé pour l'activité et je souhaite utiliser le thème Holo.Light pour le DateTimePicker. J'ai essayé tous les moyens possibles mais je n'y suis pas parvenu. Veuillez m'aider.

0 votes

J'ai mis à jour ma réponse. Vérifiez en bas vous pouvez télécharger le code que j'ai utilisé.

77voto

Bhavesh Patadiya Points 11043

Tout d'abord, faites en sorte que le sélecteur de date et d'heure apparaisse dans la même boîte de dialogue.

Je peux vous aider : vous pouvez créer une mise en page composée d'une page d'accueil et d'une page de présentation. DatePicker et un TimePicker dans un LinearLayout avec l'orientation fixée à 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>

Utilisez ensuite 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 faites quelque chose comme ça :

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

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

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

0 votes

Qu'est-ce que le "custom_dialog" ici ?

0 votes

@Jayesh : "custom_dialog" est le fichier xml que j'ai montré ci-dessus.

0 votes

Mais il affiche les boutons de sélection comme la première image de l'image ci-dessus, je vois que dans Android 2.3.3 et dans Android 4.0.3 il affiche seulement deux lignes horizontales et le bouton PM ... pouvez-vous s'il vous plaît poster le code de démonstration ici

2voto

Harish Points 1294

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

Définissez votre propre thème comme suit, qui prolonge 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 points suivants change-basic-theme-color-of-Android-application

0 votes

Ça ne marche pas :( où puis-je trouver l'image par défaut du devider pour que je puisse la changer ? Peut-être que l'image que j'utilise n'est pas bonne

0 votes

<resources xmlns:Android="schemas.Android.com/apk/res/Android">; <style name="AppTheme" parent="Android:Theme.Holo.Light.DarkActionBar" /> <style name="mytheme" parent="@Android:style/Theme.Black" > <item name="Android:_DEFAULT_BASE_COLOR_1">#FFFFFF</item> <item name="Android:windowNoTitle">true</item> </style> </resources> you can write this resources drawable folder and try. keep this name as MyDevider.

1voto

Noowenz Points 56

Sélecteur de date et Sélecteur de temps les deux dans un seul dialogue. Consultez cette bibliothèque simple et facile à utiliser. CustomDateTimePicker

enter image description here enter image description here

J'espère que cela vous aidera. Bon codage ! !!

0voto

Md Imran Choudhury Points 2536

Il existe de nombreuses solutions, 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();
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X