2010-08-12 5 views
10

J'ai été bloqué sur un problème DatePicker pour plusieurs et je n'arrive pas à trouver de solution.DatePicker personnalisé

J'ai actuellement un DatePickerDialog qui correspond assez bien à mes besoins mais je dois également pouvoir masquer/désactiver le champ Jour et Mois (afin de sélectionner un mois ou une année), je ne trouve pas solution excepté l'implémentation de mon propre MonthPicker/yearPicker. le fait est que je ne sais pas vraiment par où commencer pour écrire un sélecteur qui a le même style que celui par défaut.

Je serais heureux que l'un d'entre vous ait un exemple de code de date personnalisée ou une idée plus simple pour faire face à mon problème.

Merci beaucoup

chut

+0

Essayez, vous pouvez commencer à partir d'ici, il a la normale sélection de spinner et vue swipe téléavertisseur complexe http://viswanathl.in/2014/02/custom-datepicker-in-android/ –

Répondre

7

Mon idée utilise une coutume date Allez pour Android. Dans Google Code, j'ai trouvé un projet open source appelé Android Wheel

Android wheel for date time picker

Après le code source de paiement de Google Code, vous trouverez plusieurs exemple afin que vous pouvez facilement personnaliser un sélecteur de l'année que vous le souhaitez.

+0

salut avez-vous le code source de cette roue? – Dimitri

+0

@Nikita Vous pouvez trouver dans ma réponse le lien vers son repo Google Code. – anticafe

+0

pouvez-vous me donner le lien s'il vous plaît? – Dimitri

1

Son hacky un peu, mais si vous regardez la mise en page pour le DatePicker vous pouvez voir un FrameLayout contenant 3 sous-vues. Donc, je voulais la cacher l'année et l'ai fait.

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    ViewGroup group = (ViewGroup) findViewById(R.id.picker); 
    group = (ViewGroup) group.getChildAt(0); 
    Toast.makeText(this, String.format("%s children", group.getChildCount()), Toast.LENGTH_SHORT).show(); 
    try{ 
     group.getChildAt(2).setVisibility(View.GONE); 
      // 2 for year, 1 for day, 0 for month 
    }catch(Exception e){ 
     Toast.makeText(this, e.toString(), Toast.LENGTH_SHORT).show(); 
    } 
} 

Ceci obtient le framelayout du sélecteur et cache alors son 3ème enfant qui est l'année. J'espère que cela t'aides!

+0

Merci pour l'idée. Bien que seule l'année puisse être cachée avec succès en général, la position du mois et du jour dépend des paramètres régionaux (mois/jour/année pour les États-Unis et jour/mois/année pour le Royaume-Uni par exemple). – ernazm

3

Il y a quelques changements dans le nid d'abeilles.

ViewGroup group = (ViewGroup) findViewById(R.id.picker); 
group = (ViewGroup) group.getChildAt(0); 
group = (ViewGroup) group.getChildAt(0); 
// 0:datepicker , 1:calendar 
Toast.makeText(this, String.format("%s children", group.getChildCount()), Toast.LENGTH_SHORT).show(); 
try{ 
    group.getChildAt(0).setVisibility(View.GONE); 
    // 0 for year, 1 for month, 2 for day 
}catch(Exception e){ 
Toast.makeText(this, e.toString(), Toast.LENGTH_SHORT).show(); 
}