最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【已解决】android中的EditText控件没有获得焦点但是输入法却弹出显示->Activity中不要默认就显示输入法

Android crifan 3783浏览 0评论

【问题】

android中,对于EditText控件来说,虽然没有获得焦点,但是结果也还是跳出输入法了:

edittext not focus but show keyboard

希望达到的目的:当控件没有被点击选中的话,不要显示对应的输入法。

当用户点击选中后,再显示对应的输入法。

 

【折腾过程】

1.后来经过自己的摸索,发现好像不是,EditText没有获得焦点就显示出输入法,而应该是:

对于当前的Tab内的EditText来说,即使是Enable设置为False,不允许修改,但是其获得了焦点后,还是会显示输入法。

所以应该是:

对于Enable为False的EditText来说,应该让输入法不显示才对。

对于Enable为True的EditText来说,当获得焦点后才显示输入法。

2.搜:

android edittext disabled not show inputmethod

参考:

Disabling of EditText in android – Stack Overflow

去试试:

  //update for focusable or not
  if(variableValueView.isEnabled()){
         variableValueView.setFocusable(true);
  }
  else{
   variableValueView.setFocusable(false);
  }

果然是可以禁止输入法显示的。

但是对于当切换到另外一个Tab,焦点处于第一个EditText后,输入法还是没显示,而是重新点击一下才显示,觉得这样的话,也是不合理的。

3.再去搜已经废弃的:

android:editable="false"

参考:

android – How to make EditText not editable? – Stack Overflow

所以去试试:

  //update for focusable or not
  if(varIsEditable){
   //deprecated
   //variableValueView.setEnabled(true);
         variableValueView.setFocusable(true);
         variableValueView.setFocusableInTouchMode(true);
         
         variableValueView.setOnFocusChangeListener(mFocusChangedListener);
  }
  else{
   variableValueView.setFocusable(true);
   variableValueView.setFocusableInTouchMode(true);
   variableValueView.setOnFocusChangeListener(null);
   variableValueView.setKeyListener(null);
  }

看看结果:

结果没法输入了。

4.还是只能改为之前的:

  //update for focusable or not
  if(varIsEditable){
   //deprecated
   variableValueView.setEnabled(true);
         variableValueView.setFocusable(true);
         variableValueView.setFocusableInTouchMode(true);
         
         variableValueView.setOnFocusChangeListener(mFocusChangedListener);
  }
  else{
   variableValueView.setEnabled(false);
   variableValueView.setFocusable(true);
   variableValueView.setFocusableInTouchMode(true);
   variableValueView.setOnFocusChangeListener(null);
   variableValueView.setKeyListener(null);
  }

5.其实问题已经转化为:

android中如何不自动跳出显示键盘输入法

所以去搜:

android not show keyboard

找到:

java – How to avoid automatically appear android keyboard when activity start – Stack Overflow

去Activity的onCreate中加入:

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);

然后果然可以实现:

当启动界面后,虽然已经获得了焦点了,但是不自动跳出输入法了。

 

【总结】

此处不是(Tab页面内的)EditText没有获得焦点就显示出输入法;

也不是,EditText已把Enable设置为False,已经被禁止被编辑了,但是还是会显示出输入法;

而是:

当Activity启动后,默认显示出对应的输入法了。

所以需要去在Activity的onCreate中加上:

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);

去把默认(即使没有控件获得焦点却也会弹出)显示输入法,去掉。就可以了。

转载请注明:在路上 » 【已解决】android中的EditText控件没有获得焦点但是输入法却弹出显示->Activity中不要默认就显示输入法

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
83 queries in 0.185 seconds, using 22.13MB memory