android中editText弹出软键盘并且根据editText中是否是内容来控制按钮的可用性
mppolk
9年前
来自: http://blog.csdn.net//chenguang79/article/details/48543561
android 中editText点击弹出软键盘比较容易,可是有一种情况是,我们中转到一个编辑页面,让焦点在第一个editText中,同时自动弹出软键盘。一般情况的情况是
editText.setFocusable(true); InputMethodManager inputManager =(InputMethodManager)editText.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); inputManager.showSoftInput(editText, 0);
这种情况,在写法上没有问题,可是我会发现,这种情况,很多时间是没有反应的, 为什么?因为有时候,editText并没有完全加载完,所以后面的事件,无法相应。怎么办?我们只要让弹出的软键盘延迟半秒钟就OK了,把上面的代码,改一下OK
editText.setFocusable(true); Timer timer = new Timer(); timer.schedule(new TimerTask() { public void run() { InputMethodManager inputManager = (InputMethodManager)editText.setFocusable.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); inputManager.showSoftInput(editText.setFocusable, 0); } }, 500);
这回再试一下,就OK了
还有一种需求是这样的,当editText里面的内容为空时,确定按钮为不可用,只有有内容的时候,才为可用。这个很多会说,在点提交的时候,做一下判断就可以,然后Toast一个提示,不是就可以了吗,速度还快。可是有时候,用户的需求是变态的。我们只能满足他,怎么做呢,我想大家都知道,editText有一个事件,addTextChangedListener它里面可以对editText进行监听,如下:
editText.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { //内容改变前 } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { //内容改后 } @Override public void afterTextChanged(Editable s) { //结果显示在输入框中 } });
我们一般只要在onTextChanged中,根据s.length()是否大于0就可以完成,可是这里有一个问题,你会发现,你输入的字越多,这个onTextChanged每次执行的次数也就越多,试想一下,如果是几百字,系统怕是要卡死。这怎么办呢。在editText中有一个属性叫inputType,它里面有一个值textNoSuggestions,官方的解释是“不提示”,我们只要设置了这个属性,你再试一次,你每次添加一个字或是删除一个字,editText就只会执行一次了,而不是根据你editText中有多少内容而执行多少次了。代码如下:
editText.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { //内容改变前 } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { if(s.length>0) { txt_collection_add_ok.setEnabled(true); } else { txt_collection_add_ok.setEnabled(false); } } @Override public void afterTextChanged(Editable s) { //结果显示在输入框中 } });