Android DatePicker是一个用户界面控件,用于在android应用程序中按天,月和年选择日期。 DatePicker用于确保用户将选择一个有效日期。在具有两种模式的android DatePicker中,第一个显示完整的日历,第二个显示微调器视图中的日期。可以通过两种方式在XML文件中手动创建DatePicker控件,或者以编程方式在Activity文件中创建DatePicker控件。我们将使用Java以编程方式进行此操作。
Note: To implement DatePicker using Kotlin please refer to this.
方法
步骤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的实例。
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
return new DatePickerDialog();
}
现在将参数传递给DatePickerDialog的构造函数,该构造函数需要上下文,OnDateSetListener,年,月,dayOfMonth。
- 为上下文传递getActivity方法。
- 对于OnDateSetListener,将getActivity方法转换为OnDateSetListener。
- 为year,month和dayOfMonth创建一个日历类的实例,并将year,month和dayOfMonth分配给int类型的变量。
- 传递年月日dayOfMonth,以便在DatePickerDialog打开时具有当前日期。
@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);
}
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)。
TextView tvDate;
Button btPickDate;
tvDate = findViewById(R.id.tvDate);
btPickDate = findViewById(R.id.btPickDate);
实施DatePickerDialog类的OnDateSetListener并重写onDateSet()方法。 ontateSet()方法将在tvDate TextView中选择之后设置日期。
@Override
public void onDateSet(DatePicker view, int year, int month, int dayOfMonth)
{
// Create a Calender instance
Calendar mCalender = Calendar.getInstance();
// Set static variables of Calender instance
mCalender.set(Calendar.YEAR,year);
mCalender.set(Calendar.MONTH,month);
mCalender.set(Calendar.DAY_OF_MONTH,dayOfMonth);
// Get the date in form of string
String selectedDate = DateFormat.getDateInstance(DateFormat.FULL).format(mCalender.getTime());
// Set the textview to the selectedDate String
tvDate.setText(selectedDate);
}
在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);
}
}