1
votes

datePicker dans Android

Je veux un sélecteur de date dans lequel je peux sélectionner l'année, le mois et la date. comme ceci,

 entrez la description de l'image ici

Mais j'obtiens un sélecteur de date comme celui-ci,

 entrez la description de l'image ici a>

Je souhaite sélectionner l'année et le mois, mais dans le sélecteur de date ci-dessus, je ne peux sélectionner que le mois Voici mon code:

DatePickerDialog.OnDateSetListener mDateListener;

edBirthday.setOnClickListener( new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Calendar cal = Calendar.getInstance();
                int year = cal.get(Calendar.YEAR);
                int month = cal.get(Calendar.MONTH);
                int day = cal.get(Calendar.DAY_OF_MONTH);

                DatePickerDialog dialog =  new DatePickerDialog(
                        RegisterActivity.this,
                        android.R.style.Theme_Holo_Light_Dialog_MinWidth,
                        mDateListener,
                        year,month,day
                );
                dialog.getWindow().setBackgroundDrawable( new ColorDrawable( Color.TRANSPARENT ) );
                dialog.show();
            }
        } );

        mDateListener = new DatePickerDialog.OnDateSetListener() {
            @Override
            public void onDateSet(DatePicker datePicker ,int year ,int month ,int day) {
                month = month + 1;

                Log.d( "onDateSet" , month + "/" + day + "/" + year );
                edBirthday.setText( new StringBuilder().append( day ).append( "-" )
                        .append( month ).append( "-" ).append( year ) );
            }
        };


7 commentaires

Vous trouverez peut-être le lien suivant utile. stackoverflow.com/a/38344035/2641380


Je veux un sélecteur de date et non un sélecteur de mois et d'année @SHS


Vous avez besoin d'une sortie comme le premier cliché?


@Unnati le lien a un exemple de sélecteur de jour, de mois et d'année comme requis comme première capture d'écran. La sélection de l'année est facultative et sélectionnable par l'utilisateur. Vous pouvez créer un objet de date à partir des valeurs renvoyées.


Vous avez bien fait, je pense que vous devrez peut-être cliquer sur l'année dans le pop-up


Avez-vous vérifié la réponse? stackoverflow.com/ questions / 21321789 /…


En fait, vous pouvez également sélectionner / modifier l'année dans la deuxième capture d'écran (en cliquant sur 2019 dans le haut) - "Je veux sélectionner l'année et le mois, mais dans le sélecteur de date ci-dessus, je ne peux sélectionner que le mois"


5 Réponses :


1
votes

Oui, cela est possible en utilisant une boîte de dialogue personnalisée,

Créer lay_calander.xml

 <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

Créer une classe Java pour votre boîte de dialogue personnalisée,

MyDatePickerDialog dialog = new MyDatePickerDialog(this);
        dialog.setTitle("Set Date");
        dialog.showDatePicker(new DatePickerDialog.OnDateSetListener() {
            @Override
            public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
                //Date select callback
            }
        }, Calendar.getInstance());


8 commentaires

lorsque je cours et clique sur modifier le texte pour ouvrir la boîte de dialogue, l'erreur java.lang.IllegalStateException est générée: vous devez utiliser un thème Theme.AppCompat (ou un descendant) avec cette activité. dans la classe MyDatePickerDialog dans la fonction showDatePicker () à show ()


Mon AppTheme est Extended AppCompat dans Manifest.


classe publique MainActivity étend AppCompatActivity également l'activité devrait être.


Mon activité étend également AppCompatActivity


Il n'y a pas d'erreur cela fonctionne parfaitement mais la sortie n'est pas ce que je veux. Il donne la deuxième sortie instantanée. @Antonino


Pouvez-vous me fournir des informations dans quel simulateur vous êtes testé?


Je teste dans Redmi note 4


J'ai joint le code, veuillez le vérifier. Lien: gofile.io/?c=0fd4sF



0
votes

Ciao,

essayons ce code:

MainActivity.java

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Selected Date (MM-DD-YYYY): "
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <TextView
        android:id="@+id/Output"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text=""
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <Button
        android:id="@+id/changeDate"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Select Date"/>

</LinearLayout>

activity_main. xml

package com.antonino.datepicker;

import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.TextView;

import java.util.Calendar;

//import android.icu.util.Calendar;

public class MainActivity extends Activity {

    private static TextView Output;
    private Button changeDate;

    private int year;
    private int month;
    private int day;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Output = (TextView) findViewById(R.id.Output);
        changeDate = (Button) findViewById(R.id.changeDate);

        // Get current date by calendar

        final Calendar c = Calendar.getInstance();
        year  = c.get(Calendar.YEAR);
        month = c.get(Calendar.MONTH);
        day   = c.get(Calendar.DAY_OF_MONTH);

        // Show current date
        Output.setText(new StringBuilder()
                // Month is 0 based, just add 1
                .append(month + 1).append("-").append(day).append("-")
                .append(year).append(" "));

        // Button listener to show date picker dialog
        changeDate.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                // On button click show datepicker dialog
                DialogFragment newFragment = new SelectDateFragment();
                newFragment.show(getFragmentManager(), "DatePicker");

            }

        });
    }

    public static class SelectDateFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {

        @Override
        public Dialog onCreateDialog(Bundle savedInstanceState) {
            final Calendar calendar = Calendar.getInstance();
            int yy = calendar.get(Calendar.YEAR);
            int mm = calendar.get(Calendar.MONTH);
            int dd = calendar.get(Calendar.DAY_OF_MONTH);
            return new DatePickerDialog(getActivity(), android.R.style.Theme_Holo_Light_Dialog, this, yy, mm, dd);
        }

        public void onDateSet(DatePicker view, int yy, int mm, int dd) {
            populateSetDate(yy, mm+1, dd);
        }
        public void populateSetDate(int year, int month, int day) {
            Output.setText(month+"/"+day+"/"+year);
        }

    }

}

Si tout fonctionne, vous devriez voir un écran comme celui-ci:

 emulator_output p >


J'espère que cela vous aidera

Passez une bonne journée,
Antonino


REMARQUE: au lieu de android.R.style.Theme_Holo_Light_Dialog , vous pouvez utiliser AlertDialog.THEME_HOLO_LIGHT pour obtenir une mise en page comme celle de votre capture d'écran mais cette dernière est obsolète à partir de l'API 23

Références fort>

1 - Tutoriel DatePicker
2 - certaines fonctions appelées dans le didacticiel des dialogues étaient obsolètes, donc cette réponse a fourni un correctif basé sur DialogFragment s
3 - Constructeur DatePickerDialog
4 - Thème Holo Light Dialog


3 commentaires

@UnnatiPatadia ok questions: comment résolvez-vous la classe Calendar? il vous est suggéré de importer android.icu.util.Calendar; et importer java.util.Calendar; . Pouvez-vous s'il vous plaît essayer avec ce dernier si ce n'est pas déjà votre choix actuel? aussi: quel téléphone Android et quelle version d'Android utilisez-vous pour les tests? Je demande parce que la capture d'écran que j'ai montrée dans ma réponse provient d'un vrai test sur l'émulateur [Nexus 5X, API 26]


Mon appareil est MI Note 4. Android version 6.0.1 Marshmallow


@UnnatiPatadia J'ai essayé sur un Galaxy Nexus, l'API 23 [Android 6.0] et la sortie était celle que vous demandiez. Malheureusement, je n'ai pas le même téléphone que vous utilisez mais pour ce que je viens de dire, cela pourrait être un problème lié à la marque. Avez-vous également essayé d'exécuter cette même application sur différents téléphones?



0
votes

Utilisez la bibliothèque SpinnerDatePicker ici https://github.com/drawers/SpinnerDatePicker et l'utilisation est très simple comme décrit dans son introduction.

 new SpinnerDatePickerDialogBuilder()
            .context(MainActivity.this)
            .callback(MainActivity.this)
            .spinnerTheme(R.style.NumberPickerStyle)
            .showTitle(true)
            .showDaySpinner(true)
            .defaultDate(2017, 0, 1)
            .maxDate(2020, 0, 1)
            .minDate(2000, 0, 1)
            .build()
            .show();  

J'espère que ça aide!


0 commentaires

0
votes

Il suffit de définir

android:datePickerMode="spinner"

dans votre fichier de vue xml

si vous souhaitez que le bouton d'effacement soit ajouté, vous pouvez créer une vue personnalisée et définir des actions pour les boutons du bas


0 commentaires

0
votes

Dans Android, nous avons la boîte de dialogue du sélecteur de date pour choisir la date, mais si vous souhaitez modifier le style de la boîte de dialogue du sélecteur de date, vous pouvez changer le thème du sélecteur de date. ce sont des thèmes que vous pouvez modifier en fonction de vos besoins.

1.AlertDialog.THEME_DEVICE_DEFAULT_DARK

2.AlertDialog.THEME_DEVICE_DEFAULT_LIGHT

3.AlertDialog.THEME_HOLO_DARK

4.AlertDialog.THEME_HOLO_LIGHT

5.AlertDialog.THEME_TRADITIONAL

Je partage avec vous le lien où vous pouvez en savoir plus sur la boîte de dialogue de sélection de dates avec le code source.

https://www.android-examples.com/change-datepickerdialog-theme-in-android- using-dialogfragment /


0 commentaires