问题:Edittext不依靠button独立实现日期输入。--------一定要看方案三
发现EditText setOnClickListener事件响应中,点击俩次才会响应。当焦点在其他控件上时,第一次点击获取焦点,第二次点击响应。
解决方案一:
改用setOnTouchListener监听android.view.View下的OnTouchListener接口是只要触摸(touch)状态改变。
我用的安卓模拟器很容易出现触摸触发多次监听事件,所以改用了方案二。
解决方案二:
对焦点改变和点击事件同时设置监听。setOnClickListener&setOnFocusChangedListener。
如下所示:
class MyFocusChangeListener implements View.OnFocusChangeListener
{
public void onFocusChange(View arg0, boolean arg1)
{
// TODO Auto-generated method stub
if (arg1)//需要留意这个句,不然当焦点切换到其他控件时,会触发下面的语句。
{
hideIM(arg0);//隐藏键盘
switch (arg0.getId())
{
case R.id.applydate:
//EditText applyText = (EditText) findViewById(R.id.applydate);
new MyClickListener().datePick(applyText);
break;
case R.id.diagnosedate:
//EditText diagnoseText = (EditText) findViewById(R.id.diagnosedate);
new MyClickListener().datePick(diagnoseText);
break;
default:{}
break;
}
}
}
}
解决方案三:
在布局文件中设置android:focusable=“false”;或者EditText.setInputType(InputType.TYPE_NULL);不会弹出输入法
此时它不会获得焦点,所以不用对焦点的改变进行监听。就可以直接单独监听clickListener了。
个人认为方案三为最佳解决方案,代码量可以减少一半。
ps:
<!-- 编辑框显示android:background="@android:drawable/editbox_background_normal"-->
android:background="@null",不显示编辑框。