一般情况下,单击编辑框会弹出键盘,但很多实际应用上需要避免弹出键盘,具体方法见链接:点击打开链接一般采用方法三。
监听编辑框控件,发现第一次并不会弹出时间选择器,需要再点击一次。为解决这个问题需要再添加一个OnFocuChangeListener监听事件。
Activity代码:
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.content.Context;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.Toast;
import java.util.Calendar;
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btnDate = (Button) findViewById(R.id.btnDate);
EditText ed=(EditText)findViewById(R.id.ed_time);
btnDate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onCreateDialog().show();//直接调用下面的函数就可以弹出日期选择框
}
});
//点击editveiw时,不弹出输入键盘
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(ed.getWindowToken(), 0);
ed.setInputType(0);
//监听编辑框,当按下时弹出时间对话框
ed.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onCreateDialog().show();//直接调用下面的函数就可以弹出日期选择框
}
});
//判断焦点是否改变,第一次点击时响应,点击其他控件时焦点改变再次响应
ed.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if(hasFocus) {//hasFocus为真时代表获取焦点,为假时代表失去焦点
onCreateDialog().show();//直接调用下面的函数就可以弹出日期选择框
}else{
Toast.makeText(MainActivity.this, "gone", Toast.LENGTH_SHORT).show();
}
}
});
}
protected Dialog onCreateDialog(){
Calendar calendar = Calendar.getInstance();
Dialog dialog = null;
DatePickerDialog.OnDateSetListener dateListener =
new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker datePicker,
int year, int month, int dayOfMonth) {
EditText editText =
(EditText) findViewById(R.id.editText);
//Calendar月份是从0开始,所以month要加1
editText.setText( year + "-" +
(month+1) + "-" + dayOfMonth );
}
};
dialog = new DatePickerDialog(this,
dateListener,
calendar.get(Calendar.YEAR),
calendar.get(Calendar.MONTH),
calendar.get(Calendar.DAY_OF_MONTH));
return dialog;
}