我想显示日期选择器弹出窗口。我找到了一些例子,但我没有得到正确的。我有一个edittext,我希望当我点击edittext时,datepicker对话框应该弹出,设置日期后,日期应该显示在edittext在dd/mm/yyyy格式。请为我提供示例代码或良好的链接。
当前回答
下面是Material Date Picker的Kotlin扩展函数:
fun TextInputEditText.datePicker(fm:FragmentManager, tag: String) {
isFocusableInTouchMode = false
isClickable = true
isFocusable = false
val datePicker =
MaterialDatePicker.Builder.datePicker()
.setTitleText("Select Date")
.build()
setOnClickListener {
datePicker.show(fm,"tag")
}
datePicker.addOnPositiveButtonClickListener {
setText(datePicker.headerText)
Log.d("TAG", "datePicker: \n $it")
}}
用法:
在活动:
yourTextInputEditText.datePicker(supportFragmentManager,"tag")
在片段:
yourTextInputEditText.datePicker(requireActivity().supportFragmentManager,"tag")
其他回答
editText1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DatePickerDialog.OnDateSetListener dpd = new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
int s = monthOfYear + 1;
String a = dayOfMonth + "/" + s + "/" + year;
editText1.setText(a);
}
};
Time date = new Time();
DatePickerDialog d = new DatePickerDialog(UpdateStore.this, dpd, date.year, date.month, date.monthDay);
d.show();
}
});
我对沙玛林的解决方案。基于Linh的MvvmCross的Android:
public class DatePickerEditText : EditText, DatePickerDialog.IOnDateSetListener
{
IDisposable _clickSubscription;
public override bool Clickable => true;
protected DatePickerEditText(IntPtr javaReference, JniHandleOwnership transfer)
: base(javaReference, transfer)
=> Init();
public DatePickerEditText(Context context) : base(context)
=> Init();
public DatePickerEditText(Context context, IAttributeSet attrs)
: base(context, attrs)
=> Init();
public DatePickerEditText(Context context, IAttributeSet attrs, int defStyleAttr)
: base(context, attrs, defStyleAttr)
=> Init();
public DatePickerEditText(Context context, IAttributeSet attrs, int defStyleAttr, int defStyleRes)
: base(context, attrs, defStyleAttr, defStyleRes)
=> Init();
protected override void Dispose(bool disposing)
{
if (disposing)
{
_clickSubscription?.Dispose();
_clickSubscription = null;
}
base.Dispose(disposing);
}
public void OnDateSet(DatePicker view, int year, int month, int dayOfMonth)
=> Text = view.DateTime.ToString("d", CultureInfo.CurrentUICulture);
void Init()
{
SetFocusable(ViewFocusability.NotFocusable);
_clickSubscription = this.WeakSubscribe(nameof(Click), OnClick);
}
void OnClick(object sender, EventArgs e)
{
var date = DateTime.Today;
try
{
date = DateTime.Parse(Text, CultureInfo.CurrentUICulture);
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex);
}
var dialog = new DatePickerDialog(Context,
this,
date.Year,
date.Month,
date.Day);
dialog.Show();
}
}
来杯香草沙玛林。Android版本只需将WeakSubscribe替换为EditText的Click事件的常规订阅,不要忘记在Dispose方法覆盖中取消订阅。
class MyClass implements OnClickListener, OnDateSetListener {
EditText editText;
this.editText = (EditText) findViewById(R.id.editText);
this.editText.setOnClickListener(this);
@Override
public void onClick(View v) {
DatePickerDialog dialog = new DatePickerDialog(this, this, 2013, 2, 18);
dialog.show();
}
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
// this.editText.setText();
}
}
import android.app.DatePickerDialog;
import android.content.Context;
import android.view.View;
import android.widget.DatePicker;
import android.widget.TextView;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Locale;
public class DatePickerHelper {
private final Calendar calendar = Calendar.getInstance();
private final String dateFormat = "MM/dd/yy";
private TextView textView = null;
public DatePickerHelper(final Context context, TextView textView) {
this.textView = textView;
// Setup on click listener if the TextView is not null
if (textView != null) {
textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getDatePickerDialog(context).show();
}
});
}
}
/**
* Return a new date picker listener tied to the specified TextView field
* @return
*/
private DatePickerDialog.OnDateSetListener getOnDateSetListener() {
return new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, monthOfYear);
calendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
SimpleDateFormat sdf = new SimpleDateFormat(dateFormat, Locale.US);
textView.setText(sdf.format(calendar.getTime()));
}
};
}
/**
* Return new DatePickerDialog for field
* @param context
* @return
*/
private DatePickerDialog getDatePickerDialog(Context context) {
return new DatePickerDialog(context, getOnDateSetListener(), calendar
.get(Calendar.YEAR), calendar.get(Calendar.MONTH),
calendar.get(Calendar.DAY_OF_MONTH));
}
}
用法:
DatePickerHelper assessmentDueDateHelper = new DatePickerHelper(AssessmentsDetailActivity.this,
(TextView) findViewById(R.id.assessmentDueDateEditText));
这在2020年1月对我有效
XML部分:
<EditText
android:id="@+id/etDOB"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clickable="true"
android:editable="false"
android:ems="10"
android:hint="Enter Your Date of Birth" />
Java的部分:
final Calendar myCalendar = Calendar.getInstance();
userDOBView = (EditText)findViewById(R.id.etDOB);
final DatePickerDialog.OnDateSetListener date = new DatePickerDialog.OnDateSetListener(){
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
myCalendar.set(Calendar.YEAR, year);
myCalendar.set(Calendar.MONTH, monthOfYear);
myCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
updateLabel();
}
};
userDOBView.setOnTouchListener(new View.OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event){
if(event.getAction() == MotionEvent.ACTION_DOWN){
new DatePickerDialog("YourClassName".this, date,
myCalendar.get(Calendar.YEAR),
myCalendar.get(Calendar.MONTH),
myCalendar.get(Calendar.DAY_OF_MONTH)).show();
}
return true;
}
});
private void updateLabel() {
String myFormat = "MM/dd/yyyy"; //In which you need put here
SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.US);
// edittext.setText(sdf.format(myCalendar.getTime()));
userDOBView.setText(sdf.format(myCalendar.getTime()));
}
推荐文章
- 如何在TextView中添加一个子弹符号?
- PreferenceManager getDefaultSharedPreferences在Android Q中已弃用
- 在Android Studio中创建aar文件
- 修改抽射超时时间
- 如何通过数据从第二个活动到第一个活动时按回?——安卓
- 如何在android中获得当前前景活动上下文?
- 如何在Android中获取当前日期?
- 获取Android设备名称
- 在WebView中上传文件
- 加载HTML文件到WebView
- Android:为什么视图没有maxHeight ?
- 如何获得具有已知资源名称的资源id ?
- 在Android上将字符串转换为整数
- 为什么“System.out。”println“工作在Android?
- WebView显示err_cleartext_not_allowed尽管站点是HTTPS