Thursday, August 31, 2017

Custom Spinner DatePicker supporting N(7.0)

DatePicker with Spinner does not work on Nougat(7.0) due to bug in sdk
TO overcome create custom date picker dialog

1. create style

<style name="DatePicker" parent="@android:style/Theme.Holo.Light">
    <item name="android:datePickerStyle">@android:style/Widget.DatePicker</item>
</style>


2. create custom layout

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

    <DatePicker android:theme="@style/DatePicker" 
android:id="@+id/fragment_date_picker_control"        
android:datePickerMode="spinner"        
android:spinnersShown="true"        
android:calendarViewShown="false"        
android:layout_marginLeft="@dimen/margin_normal"        
android:layout_marginRight="@dimen/margin_normal"        
android:layout_width="wrap_content"        
android:layout_height="wrap_content"        
android:layout_gravity="center_horizontal" />
    <View        android:layout_width="match_parent"        
android:layout_height="@dimen/line_separator_small"        
android:background="@android:color/darker_gray"/>
    <LinearLayout        android:layout_width="match_parent"       
 android:layout_height="wrap_content"       
 android:orientation="horizontal"        
android:layout_marginTop="@dimen/margin_small"        >
        <Button            android:id="@+id/fragment_date_picker_negative"           
 android:layout_width="0dp"            android:layout_height="wrap_content"       
     android:layout_weight="1"          
  android:text="@string/fragment_date_picker_negative"         
   android:contentDescription=""            
style="@style/DatePickerButton"            />
        <Button android:id="@+id/fragment_date_picker_positive"    
        android:layout_width="0dp"         
   android:layout_height="wrap_content"      
      android:layout_weight="1"        
    android:text="@string/fragment_date_picker_positive"   
         android:contentDescription=""       
     style="@style/DatePickerButton"            />
    </LinearLayout>
</LinearLayout>

3. Create Dialog

public class DatePickerFragment extends DialogFragment {

@Overridepublic View onCreateView(final LayoutInflater inflater, final ViewGroup container,
        final Bundle savedInstanceState) {
    final View view = inflater.inflate(R.layout.fragment_date_picker, container, false);
    init();
    return view;
}

public Dialog onCreateDialog(final Bundle savedInstanceState) {
    final Dialog dialog = super.onCreateDialog(savedInstanceState);
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    return dialog;
}

private void init() {
    final Calendar c = Calendar.getInstance();
    if (mCurrentDate != -1) {
        c.setTimeInMillis(mCurrentDate);
    }
    final int year = c.get(Calendar.YEAR);
    final int month = c.get(Calendar.MONTH);
    final int day = c.get(Calendar.DAY_OF_MONTH);

    mDatePicker.init(year, month, day, null);
    if (mMinDate != -1) {
        mDatePicker.setMinDate(mMinDate);
    }
    if (mMaxDate != -1) {
        mDatePicker.setMaxDate(mMaxDate);
    }
}

protected void onPositiveSelected() {
    if (mListener != null) {
        mListener.onDateSelected(mDatePicker.getYear(), mDatePicker.getMonth(), 
                                 mDatePicker.getDayOfMonth());
    }
    dismiss();
}

protected void onNegativeSelected() {
    dismiss();
}

}

No comments:

Post a Comment