为什么要双击以显示日期对话框



为什么当我有两个编辑文本框时 - (一个调用日期对话框,另一个调用时间对话框)。 为什么我必须按两次才能打开对话框。 第一次按聚焦它,然后第二次按打开对话框。

我如何使当我按下编辑文本框时,对话框在第一次按下时打开

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.

最新更新