android - DatePicker 对话框,带有来自 edittext 的预选值
问题描述
我有一个 datepicker 对话框,单击 edittext 打开。我想要的是,当我单击edittext 时,日期选择器对话框应显示已存在于edittext 中的日期。
我的代码: XML 代码:
<EditText
android:id="@+id/dob"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:inputType="date"
android:hint="Date Of Birth"
android:textSize="12sp"
android:drawableRight="@drawable/ic_perm_contact_calendar_black_24dp"
android:drawableTint="@android:color/holo_orange_light"/>
Java代码:
dob.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
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-MMM-yyyy"; // your format
SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.getDefault());
dob.setText(sdf.format(myCalendar.getTime()));
}
};
new DatePickerDialog(PersonalDetailsFormActivity.this, date, myCalendar.get(Calendar.YEAR), myCalendar.get(Calendar.MONTH), myCalendar.get(Calendar.DAY_OF_MONTH)).show();
}
});
我在网上浏览过很多链接,但都展示了如何在edittext中设置日期,但我想要的是与此相反的。edittext 中有一个值,并且日期选择器对话框应该以该日期作为预选值打开。
解决方案
尝试这个
以 MM/DD/YYYY 格式输入日期,然后单击 Edittext 以便 DatePicker 弹出输入日期。
MainActivity.java
package mydemo.com.datepiker;
import android.app.DatePickerDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.Toast;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class MainActivity extends AppCompatActivity {
String date = "";
EditText edittext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edittext = (EditText) findViewById(R.id.edittext);
edittext.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy"); // Make sure user insert date into edittext in this format.
Date dateObject;
try {
String dob_var = (edittext.getText().toString());
dateObject = formatter.parse(dob_var);
date = new SimpleDateFormat("dd/MM/yyyy").format(dateObject);
String[] items1 = date.split("/");
String d1 = items1[0];
String m1 = items1[1];
String y1 = items1[2];
int d = Integer.parseInt(d1);
int m = Integer.parseInt(m1);
int y = Integer.parseInt(y1);
DatePickerDialog datePicker = new DatePickerDialog(MainActivity.this, 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);
edittext.setText(date);
}
}, y, m - 1, d);
datePicker.show();
} catch (java.text.ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Log.i("Exception is: ", e.toString());
}
}
});
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="mydemo.com.datepiker.MainActivity">
<EditText
android:id="@+id/edittext"
android:layout_width="match_parent"
android:hint="Enter Date:"
android:layout_height="wrap_content" />
</android.support.constraint.ConstraintLayout>
希望这现在可以帮助你。
推荐阅读
- spring-boot - Hikari 数据池在 Spring Boot 应用程序中关闭
- .net - 在 Visual Studio 中显示文件时从编译中排除文件
- php - 使用 array_filter 按值过滤 php 数组
- python - Selenium python,仅在某些条件下单击
- c++ - 在目录中查找所有 .cpp .h 文件的常规方法(包括、src 等...)
- javascript - 如何动画更改网格项目大小 Material UI
- amazon-web-services - 如何使用 Elastic Beanstalk 自动执行 EBS 加密
- azure-functions - 将某些 Azure Functions 的访问权限限制为 AD 组的成员
- javascript - knex 仅在用户名不存在时添加用户名
- node.js - 从 Firestore 获取文档列表