Skip to main content

Featured

Android studio “SDK tools directory is missing”

Following 2 possible solutions will resolve this problem :  Solution1 : To fix the problem, it was required that I list the path to my corporate PAC file by using  Configure -> "Appearance and Behavior" -> System Settings -> HTTP Proxy . I selected "Automatic proxy configuration url:" Delete your  ~/.Android*  folders (losing all of your settings :/). Run Android Studio. It will show you a welcome wizard where it tries to download the SDK again (and fails due to my rubbish internet). Click the X on the wizard window. That will enable you to get to the normal welcome dialog. Go to Settings->Project Defaults->Project Structure and change the Android SDK location to the correct one. Solution 2 : To fix the problem, it was required that I list the path to my corporate PAC file by using  Configure -> "Appearance and Behavior" -> System Settings -> HTTP Proxy . I selected "Automatic proxy configuration url:&quo

Best working code to set Date limits on Date Picker Dialog,in Android

Refer:
http://www.mkyong.com/android/android-date-picker-example/

http://www.appstraxion.fr/date-range-datepickerdialog-android/

http://stackoverflow.com/questions/8675984/date-picker-with-max-and-minimum-date-in-ondatechanged-in-android-1-5

http://stackoverflow.com/questions/10329236/android-datepickerdialog-should-not-accept-future-dates

DatePickerRestriction.java:-

package com.mkyong.android;

import java.util.Calendar;

import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.TextView;
import android.widget.Toast;

public class DatePickerRestriction extends Activity {

    private TextView tvDisplayDate;
    private DatePicker dpResult;   
   
    private int mYear;
    private int mMonth;
    private int mDay;
    static final int DATE_DIALOG_ID = 1;
 
 //these variables are used to set max years need to set on Date Picker dialog...
    int minYear1 = 2000;
    int minMonth1 = 0;//0-january , 1-february , 2-march..
    int minDay1 =1;
   
    int minYear = minYear1;
    int minMonth = minMonth1;
    int minDay = minDay1;

    //these are the minimum dates to set Datepicker..
    private int year;
    private int month;
    private int day;   
   
    public String dateOutput=null;
   
   
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
         final Calendar c = Calendar.getInstance();
            mYear = c.get(Calendar.YEAR);
            mMonth = c.get(Calendar.MONTH);
            mDay = c.get(Calendar.DAY_OF_MONTH);
           
            setCurrentDateOnView();
       
        Button pickDate = (Button) findViewById(R.id.btnChangeDate);
        pickDate.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                        showDialog(DATE_DIALOG_ID);
                }
        });
      
    }

    // display current date
    public void setCurrentDateOnView() {
       
        System.out.println("----------setCurrentDateOnView()-----------");

        tvDisplayDate = (TextView) findViewById(R.id.tvDate);
        dpResult = (DatePicker) findViewById(R.id.dpResult);

        final Calendar c = Calendar.getInstance();
        year = c.get(Calendar.YEAR);
        month = c.get(Calendar.MONTH);
        day = c.get(Calendar.DAY_OF_MONTH);

        // set current date into textview
        tvDisplayDate.setText(new StringBuilder()
                // Month is 0 based, just add 1
                .append(month + 1).append("-").append(day).append("-")
                .append(year).append(" "));

        // set current date into datepicker
        dpResult.init(year, month, day, null);
    }
   

    //this was the main part in program to Restrict the DatePicker Dialog  to only its current date.
    @Override
    protected Dialog onCreateDialog(int id) {
        System.out.println("----------onCreateDialog()-----------");
        DatePickerDialog _date = null;
               
        switch (id) {
        case DATE_DIALOG_ID:
                _date =  new DatePickerDialog(this,  datePickerListener,
                        year, mMonth, mDay){
           @Override
           public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth)
           {  
               System.out.println("----------onDateChanged()-----------"+mYear+"--"+year);
               System.out.println("----------onDateChanged()-----------"+mMonth+"--"+monthOfYear);
               System.out.println("----------onDateChanged()-----------"+mDay+"--"+dayOfMonth);
              
              
              /* These lines of commented code used for only setting the maximum date on Date Picker..
               *
               * if (year > mYear && year)
                   view.updateDate(mYear, mMonth, mDay);

                   if (monthOfYear > mMonth && year == mYear )
                   view.updateDate(mYear, mMonth, mDay);

                   if (dayOfMonth > mDay && year == mYear && monthOfYear == mMonth)
                   view.updateDate(mYear, mMonth, mDay);*/
              
              
               //these below lines of code used for setting the maximum as well as minimum dates on Date Picker Dialog..
               if (year < minYear)
                   view.updateDate(minYear, minMonth, minDay);

                   if (monthOfYear < minMonth && year == minYear  )
                   view.updateDate(minYear, minMonth, minDay );



                   if (dayOfMonth < minDay && year == minYear && monthOfYear == minMonth)
                   view.updateDate(minYear, minMonth, minDay);


                   if (year > mYear)
                   view.updateDate(mYear, mMonth, mDay);

                   if (monthOfYear > mMonth && year == mYear)
                   view.updateDate(mYear, mMonth, mDay);

                   if (dayOfMonth > mDay && year == mYear && monthOfYear == mMonth)
                   view.updateDate(mYear, mMonth, mDay);

                  dateOutput = String.format("Date Selected: %02d/%02d/%04d",
                                              dayOfMonth, monthOfYear+1, year);
                  // Log.d("Debug", dateOutput);

                  Toast.makeText(DatePickerRestriction.this,dateOutput,   Toast.LENGTH_SHORT).show();
           }
       };     
        }
         return _date;
    }
   
       
    private DatePickerDialog.OnDateSetListener datePickerListener = new DatePickerDialog.OnDateSetListener() {

        // when dialog box is closed, below method will be called.
        public void onDateSet(DatePicker view, int selectedYear,
                int selectedMonth, int selectedDay) {           
           
            System.out.println("----------onDateSet()-----------");                               
           
            year = selectedYear;
            month = selectedMonth;
            day = selectedDay;

            // set selected date into textview
            tvDisplayDate.setText(new StringBuilder().append(month + 1).append("-").append(day).append("-").append(year).append(" "));

            // set selected date into datepicker also
            dpResult.init(year, month, day, null);
        }
    };

}



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

    <Button
        android:id="@+id/btnChangeDate"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Change Date" />

    <TextView
        android:id="@+id/lblDate"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Current Date (M-D-YYYY): "
        android:textAppearance="?android:attr/textAppearanceLarge" />
 
    <TextView
        android:id="@+id/tvDate"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text=""
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <DatePicker
        android:id="@+id/dpResult"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>

---I implemented this in my LegalPlex Proj..


Comments

  1. This comment has been removed by the author.

    ReplyDelete
    Replies
    1. Hi Pavan, Thank you very much for your suggession.

      Delete

Post a Comment