为什么当我有两个编辑文本框时 - (一个调用日期对话框,另一个调用时间对话框)。 为什么我必须按两次才能打开对话框。 第一次按聚焦它,然后第二次按打开对话框。
我如何使当我按下编辑文本框时,对话框在第一次按下时打开
Java编码
public class MainActivity extends Activity {
int hour = -1, min = -1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// ////TIME picker
EditText etOne = (EditText) findViewById(R.id.editText1);
etOne.setOnClickListener(new EditText.OnClickListener() {
public void onClick(View v) {
// Do stuff here
if (hour == -1 || min == -1) {
Calendar c = Calendar.getInstance();
hour = c.get(Calendar.HOUR);
min = c.get(Calendar.MINUTE);
}
showTimeDialog(v, hour, min);
}
});
// ////////////////////////////////////////////////////
// //////////////////////////date picker
EditText ettwo = (EditText) findViewById(R.id.editText2);
ettwo.setOnClickListener(new EditText.OnClickListener() {
public void onClick(View v) {
// Do stuff here
Calendar c = Calendar.getInstance();
int day = c.get(Calendar.DAY_OF_MONTH);
int month = c.get(Calendar.MONTH);
int year = c.get(Calendar.YEAR);
showDateDialog(v, day, month, year);
}
});
// ///////////////////////////////////////////////
}
// ////TIME picker
public void showTimeDialog(View v, int hour, int min) {
(new TimePickerDialog(this, timeSetListener, hour, min, true)).show();
}
public TimePickerDialog.OnTimeSetListener timeSetListener = new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
hour = hourOfDay;
min = minute;
EditText et = (EditText) findViewById(R.id.editText1);
et.setText(hour + " : " + min);
}
};
// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
private void showDateDialog(View v, int day, int month, int year) {
// TODO Auto-generated method stub
(new DatePickerDialog(MainActivity.this, dateSetListener, year, month,
day)).show();
}
public DatePickerDialog.OnDateSetListener dateSetListener = new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
// TODO Auto-generated method stub
EditText et = (EditText) findViewById(R.id.editText2);
et.setText(dayOfMonth + "/" + monthOfYear + "/" + year);
}
};
}
XML编码
<?xml version="1.0" encoding="utf-8"?>
<EditText
android:id="@+id/editText1"
android:layout_width="300dp"
android:layout_height="30dp"
android:layout_gravity="left"
android:background="#999999"
android:gravity="left" />
<EditText
android:id="@+id/editText2"
android:layout_width="300dp"
android:layout_height="30dp"
android:layout_gravity="left"
android:background="#998899"
android:gravity="left" />
将其用于编辑文本
android:focusable="false"
与其使用
OnClickListener
,不如在这里使用 OnFocusChangeListener
。
例如:
etOne.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if(hasFocus){
//show whatever you want
}
}
});
试试看
You can use OnClickListener event to handle the dialog box but after disabling the android:focusableInTouchMode of EditText in the xml file like this. eg -
android:focusableInTouchMode="false".
Because when the EditText is first touched it calls the focus event and on second touch it call the click event so you have to disable the focus event first.