2013-05-22 10 views
6

Właśnie rozpoczął naukę Android jako hobby i chciałbym stworzyć okno z dwoma datepickerJak utworzyć niestandardowe okno dialogowe z dwoma datepicker?

final Dialog dialog = new Dialog(this); 
dialog.setContentView(R.layout.data_picker_dialog); 
dialog.setTitle(R.string.date_period_picker); 
dialog.show(); 
return true; 

Jak można uzyskać wartości wybranych w oknie dialogowym? Czy istnieje możliwość automatycznego włączenia przycisku OK/Anuluj w oknie dialogowym?

Czy istnieje biblioteka, która ma taką funkcjonalność (wybór daty rozpoczęcia i zakończenia/okresu)?

+0

dodać dwa wyboru daty w xml dialogowego. Użyj OnDateChangedaListener do słuchania zmian. Użyj setNegativeButton dla "Anuluj" i setPositiveButton dla "Ok" – Milan

Odpowiedz

12

Najprawdopodobniej najlepiej przeczytać najpierw o numerach Dialogs i Pickers.

Jeśli chodzi o implementację, możesz mieć dwa przyciski: Jeden do wyboru wyboru daty dla daty początkowej i drugi do daty zakończenia.

Edycja: Jeśli naprawdę chcesz pokazać 2 selektory daty w jednym oknie dialogowym, oto przykład jak to zrobić. Najpierw utwórz niestandardowy układ XML.

/res/layout/custom_date_picker.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <DatePicker 
     android:id="@+id/dpStartDate" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:calendarViewShown="false" /> 

    <DatePicker 
     android:id="@+id/dpEndDate" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:calendarViewShown="false" /> 

</LinearLayout> 

Następny jest użycie powyższy układ w oknie dialogowym:

// These variables will hold the date values later 
private int startYear, startMonth, startDay, endYear, endMonth, endDay; 

/** 
* Displays the start and end date picker dialog 
*/ 
public void showDatePicker() { 
    // Inflate your custom layout containing 2 DatePickers 
    LayoutInflater inflater = (LayoutInflater) getLayoutInflater(); 
    View customView = inflater.inflate(R.layout.custom_date_picker, null); 

    // Define your date pickers 
    final DatePicker dpStartDate = (DatePicker) customView.findViewById(R.id.dpStartDate); 
    final DatePicker dpEndDate = (DatePicker) customView.findViewById(R.id.dpEndDate); 

    // Build the dialog 
    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setView(customView); // Set the view of the dialog to your custom layout 
    builder.setTitle("Select start and end date"); 
    builder.setPositiveButton("OK", new DialogInterface.OnClickListener(){ 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      startYear = dpStartDate.getYear(); 
      startMonth = dpStartDate.getMonth(); 
      startDay = dpStartDate.getDayOfMonth(); 
      endYear = dpEndDate.getYear(); 
      endMonth = dpEndDate.getMonth(); 
      endDay = dpEndDate.getDayOfMonth(); 
      dialog.dismiss(); 
     }}); 

    // Create and show the dialog 
    builder.create().show(); 
} 

Wreszcie, można wyświetlić to okno, po prostu dzwoniąc showDatePicker().

+2

Jest to również rozwiązanie, ale ładniejsze rozwiązanie, aby mieć oba w jednym oknie dialogowym. –

+0

Zaktualizowałem odpowiedź, aby pokazać przykład. – Krauxe

+0

To działa idealnie. Świetny przykład. – DroidT

0

Wystarczy, że utworzysz selektor daty w swoim układzie xml (data_picker_dialog). I uzyskaj dane z Twojego identyfikatora

1

To samo dotyczy układu

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
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 
     android:id="@+id/datePicker2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 
</LinearLayout> 
Powiązane problemy