转载于 http://blog.csdn.net/xx326664162/article/details/53436123
在一些需要注册的项目中我们可能需要用户填写生日等其他的日期格式的数据,这时候选择DatePickerDialog无疑是比较好的选择。在用户点击输入框或者输入框获得焦点的时候弹出来DatePickerDialog,用户点击设定按钮,将日期填写到输入框。
<EditText
android:id="@+id/Birthday"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="30dip"
android:layout_marginRight="30dip"
android:inputType="none"//不显示系统输入键盘
android:layout_weight="1" >
</EditText>
下面分别为EditText控件设置了两种监听事件,setOnClickListener()和setOnFocusChangeListener(),如果不设置setOnFocusChangeListener()需要点击两次EditText控件,第一次获得焦点,第二次点击才会触发setOnClickListener()。所以为了点击一次就能弹出日期选择框,需要设置setOnFocusChangeListener()
birthday = (EditText)findViewById(R.id.Birthday);
birthday.setInputType(InputType.TYPE_NULL); //不显示系统输入键盘</span>
birthday.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
// TODO Auto-generated method stub
if(hasFocus){
showDatePickerDialog();
}
}
});
birthday.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
showDatePickerDialog();
}
});
/**
* 展示日期选择对话框
*/
private void showDatePickerDialog() {
Calendar c = Calendar.getInstance();
new DatePickerDialog(RecognizeRecordActivity.this, new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
// TODO Auto-generated method stub
birthday.setText(year+"/"+(monthOfYear+1)+"/"+dayOfMonth);
}
}, c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH)).show();
防止EditText控件自动聚焦
为了防止,进入界面EditText控件自动聚焦,导致弹出日期选择器,需要在EditText控件所在的LinearLayout中添加如下代码:
android:focusable="true"
android:focusableInTouchMode="true"
EditText如何关闭软键盘
方法一:
在AndroidMainfest.xml中选择哪个activity,设置windowSoftInputMode属性为adjustUnspecified|stateHidden
<activity Android:name=".Main"
android:label="@string/app_name"
android:windowSoftInputMode="adjustUnspecified|stateHidden"
android:configChanges="orientation|keyboardHidden">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
方法二:
强制隐藏Android输入法窗口
EditText edit=(EditText)findViewById(R.id.edit);
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(edit.getWindowToken(),0);
方法三
EditText始终不弹出软件键盘
EditText edit=(EditText)findViewById(R.id.edit);
edit.setInputType(InputType.TYPE_NULL);
屏蔽实体键盘
Android用代码实现EditText不可编辑
editText.setFilters(new InputFilter[] { new InputFilter() {
@Override
public CharSequence filter(CharSequence source, int start,
int end, Spanned dest, int dstart, int dend) {
return source.length() < 1 ? dest.subSequence(dstart, dend) : "";
}
}
});
但是这样连DatePicker的设置也不能显示到EditText里了,改一改
实现EditText不可编辑
birthEdit.setFilters(new InputFilter[]{new InputFilter(){
@Override
public CharSequence filter(CharSequence source, int start, int end,
Spanned dest, int dstart, int dend) {
showDialog(HmConst.DIALOG_DATEPICKER);//不管按什么键都让DatePicker出现
return source.length() == 1 ? "" : source; //DatePicker的设置还是要让他显示滴
}
}});