2016-03-06 23 views
0

我正在构建一个演示应用程序,其中我想允许21岁以上的人,我该如何做到这一点。 我想带上DOB并计算当年的年龄。我想使用DatePicker,但看到不同的片段就搞砸了。谢谢如何在Android中保持最小年龄限制

回答

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 
     } 
    } 
    } 
} 
+0

感谢ü非常多的答案,但那朵不是笏正是我想要的,我有一个编辑框在它应该显示DOB笏我已经进入。如果年龄大于或等于,应在编辑框中显示是否应显示吐司。 – aadhagupta

+0

我已经更新解决方案,因为你的需要 – Inducesmile

+0

谢谢你完成了这段代码,它真的帮助了我,我添加了一些改变。非常感谢你 – aadhagupta

0

,如果你想从日期选择器本身可以限制年龄这样做,

   <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(); 


     } 
    });