如何在Android中保持最小年龄限制

时间:2016-03-06 03:09:33

标签: android datetime datepicker

我正在构建一个演示应用程序,我希望允许21岁以上的人,我该怎么做。 我想在那里拿DOB并用当年计算年龄。我想使用DatePicker,但看到不同的片段搞砸了。感谢

3 个答案:

答案 0 :(得分:0)

这是一个简单的代码,可以指导您实现您的目标。

使用按钮单击启动DatePicker对话框

布局文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.inducesmile.mydatepicker.MainActivity">

<EditText
    android:id="@+id/display_dob"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="24dp"/>

<Button
    android:id="@+id/select_dob"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:padding="16dp"
    android:textColor="#000000"
    android:textSize="15sp"
    android:text="Select your Date of birth"
    android:layout_centerVertical="true"
    android:layout_centerHorizontal="true"/>

</RelativeLayout>

然后是Activity类

import android.app.DatePickerDialog;
import android.app.Dialog;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.Toast;

import java.util.Calendar;

public class MainActivity extends AppCompatActivity {


private DatePickerFragment datePickerFragment;
private static Calendar dateTime = Calendar.getInstance();

protected static int mYear;
protected static int mMonth;
protected static int mDay;

private static final int allowedDOB = 21;

protected static EditText displayDOB;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    displayDOB = (EditText)findViewById(R.id.display_dob);

    Button dobButton = (Button) findViewById(R.id.select_dob);
    dobButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            datePickerFragment = new DatePickerFragment();
            datePickerFragment.show(getSupportFragmentManager(), "Select Your Birthday");
        }
    });
}

public static class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // Using current date as start Date
        final Calendar c = Calendar.getInstance();
        mYear = c.get(Calendar.YEAR);
        mMonth = c.get(Calendar.MONTH);
        mDay = c.get(Calendar.DAY_OF_MONTH);

        // Get DatePicker Dialog
        return new DatePickerDialog(getActivity(), this, mYear, mMonth, mDay);
    }

    @Override
    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {

        mYear = year;
        mMonth = monthOfYear;
        mDay = dayOfMonth;

        dateTime.set(mYear, monthOfYear, dayOfMonth);
        long selectDateInMilliSeconds = dateTime.getTimeInMillis();

        Calendar currentDate = Calendar.getInstance();
        long currentDateInMilliSeconds = currentDate.getTimeInMillis();

        SimpleDateFormat simpleDate =  new SimpleDateFormat("dd/MM/yyyy", Locale.getDefault());
        String strDt = simpleDate.format(dateTime.getTime());

        displayDOB.setText(strDt);

        if (selectDateInMilliSeconds > currentDateInMilliSeconds) {
            Toast.makeText(getActivity(), "Your birthday date must come before taday's date", Toast.LENGTH_LONG).show();
            return;
        }

        long diffDate = currentDateInMilliSeconds - selectDateInMilliSeconds;
        Calendar yourAge = Calendar.getInstance();
        yourAge.setTimeInMillis(diffDate);

        long returnedYear = yourAge.get(Calendar.YEAR) - 1970;

        if (returnedYear < allowedDOB) {
            Toast.makeText(getActivity(), "Sorry!!! You are not allowed to use this app", Toast.LENGTH_LONG).show();
            return;
        } else {
            // move to another activity page
        }
    }
  }
}

答案 1 :(得分:0)

如果你想限制datepicker本身的年龄,你可以这样做,

              <com.deevita.patient.Custom_Layouts.editText
                        android:id="@+id/dob"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_centerHorizontal="true"
                        android:layout_centerVertical="true"
                        android:drawableStart="@drawable/ic_date_icon"
                        android:drawablePadding="@dimen/drawable_padding"
                        android:focusable="false"
                        android:hint="@string/birthday"
                        android:inputType="date"
                        android:padding="@dimen/padding_common_new"
                        android:textSize="@dimen/font_small">

                    </com.deevita.patient.Custom_Layouts.editText>

在java

中添加以下代码
   dob.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            final Calendar calendar = Calendar.getInstance();
            calendar.add(Calendar.YEAR,-21); // the age you want to limit
            int yy = calendar.get(Calendar.YEAR);
            int mm = calendar.get(Calendar.MONTH);
            int dd = calendar.get(Calendar.DAY_OF_MONTH);
            DatePickerDialog datePicker = new DatePickerDialog(getActivity(), new DatePickerDialog.OnDateSetListener() {
                @Override
                public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                    String date = String.valueOf(dayOfMonth) + "-" + String.valueOf(monthOfYear + 1)
                            + "-" + String.valueOf(year);
                   dob.setText(date);
                }
            }, yy, mm, dd);



            datePicker.getDatePicker().setMaxDate(calendar.getTimeInMillis());
            datePicker.show();


        }
    });

答案 2 :(得分:0)

<块引用>

如果用户输入了年龄

驱动程序 = edtdriverage.getText().toString();

else if ( Integer.parseInt(driverage)> 55  || Integer.parseInt(driverage)< 18) {
        GlobalMethods.Toast(AddDriverActivity.this, getString(R.string.enter_driver_age_min));
        cancel = true;
    }

您也可以通过验证方法来实现