如何设置EditText字段的最小日期?

时间:2017-06-25 04:06:17

标签: android android-fragments datepicker

我正在尝试设置最小日期(应该是当前日期),以便用户无法选择比今天更早的日期。你可以看到我在片段中工作。我已经搜索了帮助,但要么我不清楚,因为我刚开始编码或者我没有使用它。这是我编码到现在为止,但我不能再进一步。

    public class DatePickerFragment extends DialogFragment
        implements DatePickerDialog.OnDateSetListener {
        @Override
        public Dialog onCreateDialog(Bundle savedInstanceState) {
        // Use the current date as the default date in the picker
            final Calendar c = Calendar.getInstance();
            int year = c.get(Calendar.YEAR);
            int month = c.get(Calendar.MONTH);
            int day = c.get(Calendar.DAY_OF_MONTH);
        // Create a new instance of DatePickerDialog and return it
            return new DatePickerDialog(getActivity(), this, year, month, day);
            }

        @Override
        public void onDateSet(DatePicker datePicker, int year, int month, int day) {
            Calendar cal = new GregorianCalendar(year, month, day);
            setDate(cal);
        }

        protected void setDate(final Calendar calendar) {
            final DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.SHORT);
        ((TextView) getActivity().findViewById(R.id.datenaissance)).setText(dateFormat.format(calendar.getTime()));
        }
    }

这是我正在使用的第二个片段:

package cm.opep.opep.fragment;


import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;
import cm.opep.opep.R;


public class RegistrationFragment extends Fragment {
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.fragment_registration, container, false);
        initUI(v);
        return v;
    }

    private void initUI(View v){
    //Lancement de la date de naissance
        EditText datenaissance = (EditText) v.findViewById(R.id.datenaissance);
        datenaissance.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                DatePickerFragment fragment = new DatePickerFragment();
                fragment.show(getFragmentManager(), "datePicker");
            }
        });
    }
}

这是XML代码:

<LinearLayout xmlns
    android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="@color/white"
    tools:context="cm.opep.opep.Tiroir$PlaceholderFragment">

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:ignore="UselessParent">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

             <EditText
                 android:id="@+id/datenaissance"
                 android:layout_width="240dp"
                 android:layout_height="wrap_content"
                 android:hint="@string/date_de_naissance"
                 android:inputType="date"
                 android:textColor="@color/colorPrimaryDark"
                 android:textSize="12sp"
                 android:onClick="datePicker"
                 android:focusable="False"
                 android:layout_marginStart="40dp"
                 android:layout_marginEnd="40dp"
                 android:layout_marginLeft="40dp"
                 android:layout_marginRight="40dp"/>
        </LinearLayout>
    </ScrollView>
</LinearLayout>

任何帮助将不胜感激。感谢

1 个答案:

答案 0 :(得分:2)

您需要做的就是创建一个DatePickerDialog实例并使用'set min date()'函数。

    public class DatePickerFragment extends DialogFragment
    implements DatePickerDialog.OnDateSetListener {
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
    // Use the current date as the default date in the picker
        final Calendar c = Calendar.getInstance();
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH);
        int day = c.get(Calendar.DAY_OF_MONTH);
    // Create a new instance of DatePickerDialog and return it
       DatePickerDialog dialog = new DatePickerDialog(getActivity(), this, year, month, day);
    // Here you can set the minimum date on date picker ********
       dialog.getDatePicker().setMinDate(new Date().getTime());
        return dialog;
        }

    @Override
    public void onDateSet(DatePicker datePicker, int year, int month, int day) {
        Calendar cal = new GregorianCalendar(year, month, day);
        setDate(cal);
    }

    protected void setDate(final Calendar calendar) {
        final DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.SHORT);
    ((TextView) getActivity().findViewById(R.id.datenaissance)).setText(dateFormat.format(calendar.getTime()));
    }
}

或者你可以使用这个类:

public class StartDatePicker extends DialogFragment implements DatePickerDialog.OnDateSetListener {

Calendar c = Calendar.getInstance();
int startYear = c.get(Calendar.YEAR);
int startMonth = c.get(Calendar.MONTH);
int startDay = c.get(Calendar.DAY_OF_MONTH);
SharedPreferences objSharedPreferences;
SharedPreferences.Editor objEditor;
private Activity activity;
private View component;

public StartDatePicker(Activity activity, View component) {
    this.activity = activity;
    this.component = component;
    createSharedPreferences();
}

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    // TODO Auto-generated method stub

    // Use the current date as the default date in the picker
    DatePickerDialog dialog = new DatePickerDialog(activity, this, startYear, startMonth, startDay);
   //        dialog.getDatePicker().setMaxDate(new Date().getTime());
   //        dialog.getDatePicker().setMinDate(new Date().getTime());
    return dialog;

}

public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
    try {
        startDay = dayOfMonth;
        startMonth = monthOfYear + 1;
        startYear = year;

        String dateToBeSet = startDay + "-" + getMonth(startMonth) + "-" + startYear;

        if (component instanceof EditText) {
            ((EditText) component).setText(dateToBeSet);

        }

    } catch (Exception e) {
        e.printStackTrace();
    }
}

public String getMonth(int month) {
    return new DateFormatSymbols().getMonths()[month - 1].substring(0, 3);
}
}

在editText上,单击使用以下代码:

DialogFragment dialogFragment = new StartDatePicker(this, fromDateEditText);
            dialogFragment.show(getFragmentManager(), "start_date_picker");