【问题标题】:how to keep min Age Limit in Android如何在 Android 中保持最小年龄限制
【发布时间】:2016-03-06 03:09:32
【问题描述】:

正在构建一个演示应用程序,我想在其中允许 21 岁以上的人,我该怎么做。 我想带着 DOB 去计算年龄,用当年。我想使用 DatePicker,但看到不同的 sn-ps 就搞砸了。谢谢

【问题讨论】:

    标签: android datetime datepicker


    【解决方案1】:

    这是一个简单的代码,将指导您实现您的计划。

    它使用按钮单击来启动 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
            }
        }
      }
    }
    

    【讨论】:

    • 非常感谢你的回答,但这不是我想要的,我有一个编辑框,它应该显示我输入的 dob wat。如果年龄大于或等于,则应显示在编辑框中,否则应显示吐司。
    • 谢谢你完成了这段代码,它真的帮助了我,我添加了一些改变它。非常感谢你
    • long returnedYear = yourAge.get(Calendar.YEAR) - 1970 为什么你用 1970 年来计算年龄。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      如果用户输入年龄

      driverage = 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;
          }
      

      也可以通过验证方法实现

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-10-29
        • 1970-01-01
        • 2016-05-21
        • 1970-01-01
        • 2022-07-01
        • 2018-02-20
        • 2013-12-26
        相关资源
        最近更新 更多