Android中EditText点击获得焦点后无法显示输入法键盘
转载出自:https://www.crifan.com/android_edittext__got_focus_but_not_show_keyboard_inputmethod/
马克
【背景】
android中EditText的Enable已经设置为True了,表示可以被编辑,
但是点击输入框,获得焦点后,无法显示输入法,导致无法输入内容。
比如:
Descriptor的值是EditText
之前已经设置为可编辑了:
1
2
|
EditText
variableValueView = (EditText) variableLayout.findViewById(R.id.variableValue);
variableValueView.setEnabled( true );
|
当前值是DESCRIPT,点击后但是不显示输入法,所以没法修改想要的值
【折腾过程】
1.搜:
android edittext cannot input
找了些:
cannot input text into EditText widgets inside ListView – Google Groups
但是都没用
2.注意到,之前加了listener:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
OnFocusChangeListener
mFocusChangedListener;
variableValueView.setOnFocusChangeListener(mFocusChangedListener);
mFocusChangedListener
= new
OnFocusChangeListener() {
@Override
public
void
onFocusChange(View v, boolean
hasFocus) {
//
RelativeLayout parentView = (RelativeLayout)v.getParent();
//
TextView labelView = (TextView) parentView.findViewById(R.id.variableLabel);
//
String labelStr = (String) labelView.getText();
if (hasFocus){
//enter
into
//Toast.makeText(getApplicationContext(),
"got focus: " + v.toString(), Toast.LENGTH_LONG).show();
//Toast.makeText(getApplicationContext(),
"got focus: " + labelStr, Toast.LENGTH_LONG).show();
} else
{
//left
//Toast.makeText(getApplicationContext(),
"lost focus: " + v.toString(), Toast.LENGTH_LONG).show();
//Toast.makeText(getApplicationContext(),
"lost focus: " + labelStr, Toast.LENGTH_LONG).show();
//
EditText valueView = (EditText)v;
//
if(valueView.isEnabled()){
//
//only validate new value for editable value
//
if(mVarValueViewVarNameMap.containsKey(valueView)){
//
String varName = mVarValueViewVarNameMap.get(valueView);
//
String varValue = (String)valueView.getText().toString();
//
DeviceModelManager.getInstance().getCurrentDeviceModel().postvalidateVariablesvalue(varName, varValue);
//
}
//
}
}
}
};
|
现在试试,去掉Listener:
1
|
//variableValueView.setOnFocusChangeListener(mFocusChangedListener);
|
看看效果:结果还是不行,点击到可以编辑的EditText中后,还是不能显示出输入法。
3.再去搜:
android edittext not show keyboard
有空再去试试:
android – Custom EditText is not showing keyboard on focus – Stack Overflow
的:
1
|
android:focusable="true"
|
4.另外参考:
java – Programatically Hide/Show Android Soft Keyboard – Stack Overflow
去试试,给我此处的RelativeLayout
加上:
1
|
android:focusableInTouchMode="true"
|
PS:忘了说了,之前是可以正常显示出输入法的。。。不知道为何现在不能显示,也搞不清有哪些改动可能导致此问题的。
结果还是不行。
5.突然想到,难道是当前正在测试的三星的PAD(GT-P5210)有问题?所以去重启PAD试试,结果问题依旧。
6.去掉上面的
android:focusableInTouchMode
试试,结果问题依旧。
7.现在把之前的RelativeLayout中所有的EditText的Enable都改为True看看效果。
记得发现诡异的问题:
在有多个的EditText的情况下,前面几个的InputType都是
TYPE_TEXT_VARIATION_NORMAL
然后切换到
TYPE_CLASS_NUMBER
结果输入法就显示出来了,此时只允许输入数字
然后再切换到别的
TYPE_TEXT_VARIATION_NORMAL
的,输入法就可以正常出现,且允许输入各种字符了。
即:
第一次,焦点点击到String部分的EditText,结果都不能出现输入法
只有先去点击别的Number的,再切换回String的,输入法才正常,才可以输入。。。
所以再去把:
1
|
int
inputType = InputType.TYPE_TEXT_VARIATION_NORMAL;
|
换为别的值,但是想要在换之前,再去确认各种可能的类型。
然后搜:
android TYPE_TEXT_VARIATION_NORMAL not show
参考:
android – Show the password with EditText – Stack Overflow
果然和我想的一样,感觉应该用bit or的:
1
|
inputType
= InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_NORMAL;
|
看看效果,结果真的就可以了:
当EditText获得焦点后,就自动显示出输入法,可以输入内容了。而且光标也能显示出来了(之前连光标也没有的)
如图:
【总结】
对于EditText的话,其InputType属性
如果设置为
1
|
InputType.TYPE_TEXT_VARIATION_NORMAL
|
(对应的xml定义中是)
则会导致
可以点击对应的EditText,获得焦点
但是无法显示输入法,无法显示光标
改为:
1
|
InputType.TYPE_CLASS_TEXT
| InputType.TYPE_TEXT_VARIATION_NORMAL;
|
就可以:
在获得焦点后,显示对应的输入法和光标了。
【引申】
1.参考了官网的解释:
InputType | Android Developers
“
A time field:
”
再去把之前错写为:
1
|
inputType
= InputType.TYPE_DATETIME_VARIATION_TIME;
|
改为:
1
|
inputType
= InputType.TYPE_CLASS_DATETIME | InputType.TYPE_DATETIME_VARIATION_TIME;
|
2.又从:
Android programmatically disable autocomplete/autosuggest for EditText in emulator – Stack Overflow
的
textVisiblePassword
找到:
可知:
前面所说的
1
|
InputType.TYPE_CLASS_TEXT
| InputType.TYPE_TEXT_VARIATION_NORMAL;
|
对应的xml中的定义:
EditText中的属性
1
|
android:inputType="text"
|
而其他不同类型,可以查看官网即可得到:
【后记】
关于EditText的InputType的更详细的解释,可参考后来的总结:
【整理】Android中EditText(或TextView)中的InputType类型含义与如何定义
转载请注明:在路上 » 【已解决】Android中EditText点击获得焦点后无法显示输入法键盘