【问题】
android中,对于EditText控件来说,虽然没有获得焦点,但是结果也还是跳出输入法了:
希望达到的目的:当控件没有被点击选中的话,不要显示对应的输入法。
当用户点击选中后,再显示对应的输入法。
【折腾过程】
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中不要默认就显示输入法