Je veux un sélecteur de date dans lequel je peux sélectionner l'année, le mois et la date. comme ceci,
Mais j'obtiens un sélecteur de date comme celui-ci,
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 ) ); } };
5 Réponses :
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());
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
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:
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
@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?
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!
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
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 /
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"