2010-08-12 14 views
10

Sono stato bloccato su un problema DatePicker per diversi e non riesco a trovare alcuna soluzione.Custom DatePicker

Attualmente ho un DatePickerDialog che si adatta abbastanza bene alle mie esigenze ANCHE Devo anche essere in grado di nascondere/disabilitare il campo Giorno e mese (per selezionare un mese o un anno), non riesco a trovarlo soluzione tranne l'implementazione del mio MonthPicker/yearPicker. il fatto è che in realtà non so da dove cominciare per scrivere un picker che abbia lo stesso stile di quello predefinito.

Sarei felice se qualcuno di voi abbia codice di esempio di picjer personalizzato o qualsiasi idea più semplice per far fronte al mio problema.

Grazie mille

hush

+0

Prova questo, Si può iniziare da qui, Ha selezione filatore normale e vista complesso cercapersone colpo http://viswanathl.in/2014/02/custom-datepicker-in-android/ –

risposta

7

La mia idea sta usando una data personalizzata Picker per android. In Google Code, ho trovato un progetto open source chiamato Android Wheel

Android wheel for date time picker

Dopo il codice sorgente cassa da Google Code, si trovano molti ad esempio in modo che si può facilmente personalizzare un anno-picker come si desidera.

+0

hi avete il codice sorgente di questa ruota? – Dimitri

+0

@Nikita Puoi trovare nella mia risposta il link al suo repository di Google Code. – anticafe

+0

puoi darmi il link per favore? – Dimitri

1

È un po 'hacky, ma se si guarda il layout di DatePicker, è possibile vedere un FrameLayout contenente 3 sotto-viste. Quindi volevo nascondere l'anno e ho fatto questo.

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(); 
    } 
} 

Questo ha l'framelayout del selettore e poi nasconde la sua 3 ° figlio, che è l'anno. Spero che questo ti aiuti!

+0

Grazie per l'idea. Anche se solo l'anno potrebbe essere nascosto con successo in generale, poiché la posizione del mese e del giorno dipende dalle impostazioni locali (mese/giorno/anno per gli Stati Uniti e giorno/mese/anno per il Regno Unito, ad esempio). – ernazm

3

C'è qualche cambiamento nel nido d'ape.

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(); 
}