📜  Android中的DatePickerDialog

📅  最后修改于: 2021-05-13 16:37:27             🧑  作者: Mango

Android DatePicker是一个用户界面控件,用于在android应用程序中按天,月和年选择日期。 DatePicker用于确保用户将选择一个有效日期。在具有两种模式的android DatePicker中,第一个显示完整的日历,第二个显示微调器视图中的日期。可以通过两种方式在XML文件中手动创建DatePicker控件,或者以编程方式在Activity文件中创建DatePicker控件。我们将使用Java以编程方式进行此操作。

日历模式

方法

步骤1:创建一个新项目

要在Android Studio中创建新项目,请参阅如何在Android Studio中创建/启动新项目请注意,选择Java作为编程语言。

步骤2:使用activity_main.xml文件

activity_main.xml文件中,仅添加一个TextView来显示所选日期,并添加一个Button来从DatePickerDialog中选择日期。以下是activity_main.xml文件的完整代码。

activity_main.xml


  
    
  
    


DatePicker.java
package tutorials.droid.datepicker;
  
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.DialogFragment;
import java.util.Calendar;
  
public class DatePicker extends DialogFragment {
    @NonNull
    @Override
    public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
        Calendar mCalender = Calendar.getInstance();
        int year = mCalender.get(Calendar.YEAR);
        int month = mCalender.get(Calendar.MONTH);
        int dayOfMonth = mCalender.get(Calendar.DAY_OF_MONTH);
        return new DatePickerDialog(getActivity(), (DatePickerDialog.OnDateSetListener)
                getActivity(), year, month, dayOfMonth);
    }
}


MainActivity.java
package tutorials.droid.datepicker;
  
import android.app.DatePickerDialog;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import java.text.DateFormat;
import java.util.Calendar;
  
public class MainActivity extends AppCompatActivity implements DatePickerDialog.OnDateSetListener {
    TextView tvDate;
    Button btPickDate;
  
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tvDate = findViewById(R.id.tvDate);
        btPickDate = findViewById(R.id.btPickDate);
        btPickDate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // Please note that use your package name here
                tutorials.droid.datepicker.DatePicker mDatePickerDialogFragment;
                mDatePickerDialogFragment = new tutorials.droid.datepicker.DatePicker();
                mDatePickerDialogFragment.show(getSupportFragmentManager(), "DATE PICK");
            }
        });
    }
  
    @Override
    public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
        Calendar mCalender = Calendar.getInstance();
        mCalender.set(Calendar.YEAR, year);
        mCalender.set(Calendar.MONTH, month);
        mCalender.set(Calendar.DAY_OF_MONTH, dayOfMonth);
        String selectedDate = DateFormat.getDateInstance(DateFormat.FULL).format(mCalender.getTime());
        tvDate.setText(selectedDate);
    }
}


步骤3:创建一个新类,并将其命名为DatePicker

现在,通过转到包并右键单击它来创建一个新类,然后选择new,然后选择Java Class。将类命名为DatePicker ,将其超类命名DialogFragment (androidx.fragment.app.DialogFragment),然后单击“确定”。

现在重写onCreateDialog方法,而不是返回super.onCreateDialog返回DatePickerDialog的实例。

现在将参数传递给DatePickerDialog的构造函数,该构造函数需要上下文,OnDateSetListener,年,月,dayOfMonth。

  • 为上下文传递getActivity方法。
  • 对于OnDateSetListener,将getActivity方法转换为OnDateSetListener。
  • 为year,month和dayOfMonth创建一个日历类的实例,并将year,month和dayOfMonth分配给int类型的变量。
  • 传递年月日dayOfMonth,以便在DatePickerDialog打开时具有当前日期。

DatePicker的完整代码。 Java类在下面给出。

日期选择器。Java

package tutorials.droid.datepicker;
  
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.DialogFragment;
import java.util.Calendar;
  
public class DatePicker extends DialogFragment {
    @NonNull
    @Override
    public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
        Calendar mCalender = Calendar.getInstance();
        int year = mCalender.get(Calendar.YEAR);
        int month = mCalender.get(Calendar.MONTH);
        int dayOfMonth = mCalender.get(Calendar.DAY_OF_MONTH);
        return new DatePickerDialog(getActivity(), (DatePickerDialog.OnDateSetListener)
                getActivity(), year, month, dayOfMonth);
    }
}

步骤4:使用MainActivity。 Java文件

现在在MainActivity中。 Java文件,同时创建一个TextView和Button的对象,并使用其ID映射组件(TextView和Button)。

实施DatePickerDialog类的OnDateSetListener并重写onDateSet()方法。 ontateSet()方法将在tvDate TextView中选择之后设置日期。

onClick()方法中,实现btPickDate的setOnClickListener。创建一个DatePicker(我们的类)的实例。使用实例的show方法并传递getSupportFragmentManager()和一个Tag。 MainActivity的完整代码。 Java文件如下。

主要活动。Java

package tutorials.droid.datepicker;
  
import android.app.DatePickerDialog;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import java.text.DateFormat;
import java.util.Calendar;
  
public class MainActivity extends AppCompatActivity implements DatePickerDialog.OnDateSetListener {
    TextView tvDate;
    Button btPickDate;
  
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tvDate = findViewById(R.id.tvDate);
        btPickDate = findViewById(R.id.btPickDate);
        btPickDate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // Please note that use your package name here
                tutorials.droid.datepicker.DatePicker mDatePickerDialogFragment;
                mDatePickerDialogFragment = new tutorials.droid.datepicker.DatePicker();
                mDatePickerDialogFragment.show(getSupportFragmentManager(), "DATE PICK");
            }
        });
    }
  
    @Override
    public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
        Calendar mCalender = Calendar.getInstance();
        mCalender.set(Calendar.YEAR, year);
        mCalender.set(Calendar.MONTH, month);
        mCalender.set(Calendar.DAY_OF_MONTH, dayOfMonth);
        String selectedDate = DateFormat.getDateInstance(DateFormat.FULL).format(mCalender.getTime());
        tvDate.setText(selectedDate);
    }
}

输出:在模拟器上运行