我想显示日期选择器弹出窗口。我找到了一些例子,但我没有得到正确的。我有一个edittext,我希望当我点击edittext时,datepicker对话框应该弹出,设置日期后,日期应该显示在edittext在dd/mm/yyyy格式。请为我提供示例代码或良好的链接。
当前回答
试试这个
btn=(Button)findViewById(R.id.chs);
final Dialog dialog = new Dialog(MainActivity.this);
dialog.setCanceledOnTouchOutside(true);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.setContentView(R.layout.datepickerdialog);
dp=(DatePicker) dialog.findViewById(R.id.btp);
dialog.show();
ok=(Button)dialog.findViewById(R.id.btn1);
ok.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
}
});
其他回答
还有另一种更好的可重用方式:
创建一个类:
class setDate implements OnFocusChangeListener, OnDateSetListener {
private EditText editText;
private Calendar myCalendar;
public setDate(EditText editText, Context ctx){
this.editText = editText;
this.editText.setOnFocusChangeListener(this);
myCalendar = Calendar.getInstance();
}
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
// this.editText.setText();
String myFormat = "MMM dd, yyyy"; //In which you need put here
SimpleDateFormat sdformat = new SimpleDateFormat(myFormat, Locale.US);
myCalendar.set(Calendar.YEAR, year);
myCalendar.set(Calendar.MONTH, monthOfYear);
myCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
editText.setText(sdformat.format(myCalendar.getTime()));
}
@Override
public void onFocusChange(View v, boolean hasFocus) {
// TODO Auto-generated method stub
if(hasFocus){
new DatePickerDialog(ctx, this, myCalendar
.get(Calendar.YEAR), myCalendar.get(Calendar.MONTH),
myCalendar.get(Calendar.DAY_OF_MONTH)).show();
}
}
}
然后在onCreate函数下调用这个类:
EditText editTextFromDate = (EditText) findViewById(R.id.editTextFromDate);
setDate fromDate = new setDate(editTextFromDate, this);
如果你需要一个单一的功能,所有的活动,当调用将打开日期选择器,然后返回我选择的日期,然后为所有创建一个接口
public interface OnDatePickerLitionarCallBack {
void DatePicker(String selectedDate);
}
然后在活动中调用接口
public class MapsActivity extends FragmentActivity implements OnDatePickerLitionarCallBack {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
findViewById(R.id.date_pick).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
date_Picker(MapsActivity.this,MapsActivity.this);
}
});
}
@Override
public void DatePicker(String selectedDate) {
}
}
实现接口后,创建一个公共类用于访问任何活动或片段
public class Commons{
public static void date_Picker(Context context, OnDatePickerLitionarCallBack onDatePickerLitionarCallBack) {
final java.util.Calendar myCalendar = java.util.Calendar.getInstance();
DatePickerDialog.OnDateSetListener date = new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
// TODO Auto-generated method stub
myCalendar.set(java.util.Calendar.YEAR, year);
myCalendar.set(java.util.Calendar.MONTH, monthOfYear);
myCalendar.set(java.util.Calendar.DAY_OF_MONTH, dayOfMonth);
String myFormat = "dd,MMM yyyy"; //In which you need put here
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat(myFormat, Locale.US);
onDatePickerLitionarCallBack.DatePicker(sdf.format(myCalendar.getTime()));
}
};
DatePickerDialog datePickerDialog = new DatePickerDialog(context, date, myCalendar
.get(java.util.Calendar.YEAR), myCalendar.get(java.util.Calendar.MONTH),
myCalendar.get(java.util.Calendar.DAY_OF_MONTH));
datePickerDialog.show();
}
}
# 1。我想显示一个datepicker与当前日期预选(我使用butterknife注入)
@OnClick(R.id.your_view) public void onClickYourView() {
final Calendar myCalendar = Calendar.getInstance();
DatePickerDialog.OnDateSetListener date = new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
// TODO Auto-generated method stub
myCalendar.set(Calendar.YEAR, year);
myCalendar.set(Calendar.MONTH, monthOfYear);
myCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
String myFormat = "dd MMMM yyyy"; // your format
SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.getDefault());
your_view.setText(sdf.format(myCalendar.getTime()));
}
};
new DatePickerDialog(mContext, date, myCalendar.get(Calendar.YEAR), myCalendar.get(Calendar.MONTH), myCalendar.get(Calendar.DAY_OF_MONTH)).show();
}
2. 如果您想预选日期,请将最后一部分替换为
new DatePickerDialog(mContext, date, 1990, 0, 1).show();
然后你可以使用myCalendar变量或直接在视图上的文本来获取它。
editText。setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View v) {
final Calendar c = Calendar.getInstance();
mYear = c.get(Calendar.YEAR);
mMonth = c.get(Calendar.MONTH);
mDay = c.get(Calendar.DAY_OF_MONTH);
final DatePickerDialog datePickerDialog = new DatePickerDialog(getContext(),
new DatePickerDialog.OnDateSetListener() {
String fmonth, fDate;
int month;
@Override
public void onDateSet(DatePicker view, int year,
int monthOfYear, int dayOfMonth) {
try {
if (monthOfYear < 10 && dayOfMonth < 10) {
fmonth = "0" + monthOfYear;
month = Integer.parseInt(fmonth) + 1;
fDate = "0" + dayOfMonth;
String paddedMonth = String.format("%02d", month);
editText.setText(fDate + "/" + paddedMonth + "/" + year);
} else {
fmonth = "0" + monthOfYear;
month = Integer.parseInt(fmonth) + 1;
String paddedMonth = String.format("%02d", month);
editText.setText(dayOfMonth + "/" + paddedMonth + "/" + year);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}, mYear, mMonth, mDay);
datePickerDialog.getDatePicker().setMaxDate(System.currentTimeMillis());
datePickerDialog.show();
}
});
我认为最好重写EditText类…
public class EditTextDP extends android.support.v7.widget.AppCompatEditText implements View.OnClickListener, DatePickerDialog.OnDateSetListener {
public EditTextDP(Context context) {
super(context);
setOnClickListener(this);
setFocusable(false);
}
public EditTextDP(Context context, AttributeSet attrs) {
super(context, attrs);
setOnClickListener(this);
setFocusable(false);
}
public EditTextDP(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
setOnClickListener(this);
setFocusable(false);
}
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
setText(new StringBuilder().append(dayOfMonth).append("/").append(monthOfYear + 1).append("/").append(year));
}
@Override
public void onClick(View v) {
Calendar calendar = Calendar.getInstance(TimeZone.getDefault());
DatePickerDialog dialog = new DatePickerDialog(getContext(), this, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH));
dialog.show();
}
}
然后在XML中使用它…
<*.*.*.EditTextDP
android:id="@+id/c1_dob_hm"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/round_edittext_white"
android:ems="10"
android:padding="8dp">
</*.*.*.EditTextDP>
推荐文章
- 警告:API ' variable . getjavacompile()'已过时,已被' variable . getjavacompileprovider()'取代
- 安装APK时出现错误
- 碎片中的onCreateOptionsMenu
- TextView粗体通过XML文件?
- 如何使线性布局的孩子之间的空间?
- DSL元素android.dataBinding。enabled'已过时,已被'android.buildFeatures.dataBinding'取代
- ConstraintLayout:以编程方式更改约束
- PANIC: AVD系统路径损坏。检查ANDROID_SDK_ROOT值
- 如何生成字符串类型的buildConfigField
- Recyclerview不调用onCreateViewHolder
- Android API 21工具栏填充
- Android L中不支持操作栏导航模式
- 如何在TextView中添加一个子弹符号?
- PreferenceManager getDefaultSharedPreferences在Android Q中已弃用
- 在Android Studio中创建aar文件