Java 在EditText中打开日期选择器单击第一次单击时不显示
我正在努力打开一个Java 在EditText中打开日期选择器单击第一次单击时不显示,java,android,datepicker,android-edittext,Java,Android,Datepicker,Android Edittext,我正在努力打开一个日期选择器,同时单击一个编辑文本。它仅在第二次单击时打开日期选择器。我已经检查了以下选项,但没有任何效果。我在这里给出了我的XML代码,请给我一个解决这个问题的方法。我几乎是在尽最大努力 <---XML content---> <EditText android:id="@+id/p_date_edt" android:layout_width="match_parent" android:layout_height="wr
日期选择器
,同时单击一个编辑文本
。它仅在第二次单击时打开日期选择器。我已经检查了以下选项,但没有任何效果。我在这里给出了我的XML代码,请给我一个解决这个问题的方法。我几乎是在尽最大努力
<---XML content--->
<EditText
android:id="@+id/p_date_edt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/margin_10dp"
android:ems="8"
android:hint="@string/dateTime"
android:focusableInTouchMode="false" />
EditText
不监听OnClickListener
,而是使用OnTouchListener
,它会工作
pDateEdt.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
datePicker();
return false;
}
});
或者,如果要使用OnClickListener
,请使用以下方法:
<EditText
android:text="@+id/EditText01"
android:id="@+id/EditText01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:focusableInTouchMode="false" />
EditText
不监听OnClickListener
,而是使用OnTouchListener
,它会工作
pDateEdt.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
datePicker();
return false;
}
});
或者,如果要使用OnClickListener
,请使用以下方法:
<EditText
android:text="@+id/EditText01"
android:id="@+id/EditText01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:focusableInTouchMode="false" />
请使用
setOnTouchListener
而不是setOnClickListener
。
请使用以下代码:
pDateEdt.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
datePicker();
break;
}
return false;
}
});
请删除这行代码:
pDateEdt.setOnClickListener(this);
请使用
setOnTouchListener
而不是setOnClickListener
。
请使用以下代码:
pDateEdt.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
datePicker();
break;
}
return false;
}
});
请删除这行代码:
pDateEdt.setOnClickListener(this);
我看到很多程序员在您的应用程序中努力实现这一功能。 现在在您的场景中,当您第一次触摸Edittext时,Edittext将进入焦点模式,当您第二次触摸相同的Edittext时,只有onClick中的方法,即datePicker()将执行。 因此,您要做的就是删除
android:focusableInTouchMode=“false”
标记
只需添加标签android:focusable=“false”
在java代码中,只需执行以下操作
pDateEdt = (EditText) view.findViewById(R.id.p_date_edt);
pDateEdt.setOnClickListener(this);
@Override
public void onClick(View v) {
datePicker();
}
我希望您的代码能够正常工作,并在您第一次触摸时打开日期选择器。我看到很多程序员在您尝试实现此功能时都在努力。 现在在您的场景中,当您第一次触摸Edittext时,Edittext将进入焦点模式,当您第二次触摸相同的Edittext时,只有onClick中的方法,即datePicker()将执行。 因此,您要做的就是删除
android:focusableInTouchMode=“false”
标记
只需添加标签android:focusable=“false”
在java代码中,只需执行以下操作
pDateEdt = (EditText) view.findViewById(R.id.p_date_edt);
pDateEdt.setOnClickListener(this);
@Override
public void onClick(View v) {
datePicker();
}
我希望您的代码可以正常工作,并在您第一次触摸时打开日期选择器。试试这个,它将在单击edittext时工作。 MainActivity.java
public class MainActivity extends AppCompatActivity {
private DatePickerDialog mDatePickerDialog;
private EditText edDate;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edDate = (EditText) findViewById(R.id.activity_ed_date);
setDateTimeField();
edDate.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
mDatePickerDialog.show();
return false;
}
});
}
private void setDateTimeField() {
Calendar newCalendar = Calendar.getInstance();
mDatePickerDialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
Calendar newDate = Calendar.getInstance();
newDate.set(year, monthOfYear, dayOfMonth);
SimpleDateFormat sd = new SimpleDateFormat("dd-MM-yyyy");
final Date startDate = newDate.getTime();
String fdate = sd.format(startDate);
edDate.setText(fdate);
}
}, newCalendar.get(Calendar.YEAR), newCalendar.get(Calendar.MONTH), newCalendar.get(Calendar.DAY_OF_MONTH));
mDatePickerDialog.getDatePicker().setMaxDate(System.currentTimeMillis());
}
}
活动\u main.xml
<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="com.demoapp.MainActivity">
<EditText
android:id="@+id/activity_ed_date"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:focusable="false"
android:hint="Date"
android:imeOptions="actionNext"
android:maxLength="30" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/colorPrimary" />
</android.support.constraint.ConstraintLayout>
试试这个,它将在单击edittext
MainActivity.java
public class MainActivity extends AppCompatActivity {
private DatePickerDialog mDatePickerDialog;
private EditText edDate;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edDate = (EditText) findViewById(R.id.activity_ed_date);
setDateTimeField();
edDate.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
mDatePickerDialog.show();
return false;
}
});
}
private void setDateTimeField() {
Calendar newCalendar = Calendar.getInstance();
mDatePickerDialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
Calendar newDate = Calendar.getInstance();
newDate.set(year, monthOfYear, dayOfMonth);
SimpleDateFormat sd = new SimpleDateFormat("dd-MM-yyyy");
final Date startDate = newDate.getTime();
String fdate = sd.format(startDate);
edDate.setText(fdate);
}
}, newCalendar.get(Calendar.YEAR), newCalendar.get(Calendar.MONTH), newCalendar.get(Calendar.DAY_OF_MONTH));
mDatePickerDialog.getDatePicker().setMaxDate(System.currentTimeMillis());
}
}
活动\u main.xml
<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="com.demoapp.MainActivity">
<EditText
android:id="@+id/activity_ed_date"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:focusable="false"
android:hint="Date"
android:imeOptions="actionNext"
android:maxLength="30" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/colorPrimary" />
</android.support.constraint.ConstraintLayout>
这是使用日期选择器最简单的方法。只需添加两个变量
private DatePickerDialog datePickerDialog;
EditText etJoiningDate;
etJoiningDate=(EditText)findViewById(R.id.etJoiningDate);
etJoiningDate.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
final Calendar cldr = Calendar.getInstance();
int day = cldr.get(Calendar.DAY_OF_MONTH);
int month = cldr.get(Calendar.MONTH);
int year = cldr.get(Calendar.YEAR);
// date picker dialog
datePickerDialog = new DatePickerDialog(TestActivity.this,
new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
etJoiningDate.setText(dayOfMonth + "/" + (monthOfYear + 1) + "/" + year);
}
}, year, month, day);
datePickerDialog.show();
break;
}
return false;
}
});
这是使用日期选择器最简单的方法。只需添加两个变量
private DatePickerDialog datePickerDialog;
EditText etJoiningDate;
etJoiningDate=(EditText)findViewById(R.id.etJoiningDate);
etJoiningDate.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
final Calendar cldr = Calendar.getInstance();
int day = cldr.get(Calendar.DAY_OF_MONTH);
int month = cldr.get(Calendar.MONTH);
int year = cldr.get(Calendar.YEAR);
// date picker dialog
datePickerDialog = new DatePickerDialog(TestActivity.this,
new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
etJoiningDate.setText(dayOfMonth + "/" + (monthOfYear + 1) + "/" + year);
}
}, year, month, day);
datePickerDialog.show();
break;
}
return false;
}
});
可能是解决此问题的最佳且最简单的方法:
在布局文件中,为EditText设置这些属性
android:clickable="true"
android:longClickable="false"
android:focusable="false"
可能是解决此问题的最佳且最简单的方法:
在布局文件中,为EditText设置这些属性
android:clickable="true"
android:longClickable="false"
android:focusable="false"
我也有同样的问题。虽然切换到onTouchListener会起作用,但正确的方法是使用按钮,并将其样式设置为editText。我也有同样的问题。虽然切换到onTouchListener会起作用,但正确的方法是使用按钮,并将其样式设置为editText。