我EditText
maxLength=1
和inputType=number|textNoSuggestions
textNoSuggestions
没有弹出可能触发textWatcher
的文字。当没有文本时我需要检测退格,当editText已满时我需要检测onkey(已经有1个字符)
的EditText :
public class ZanyEditText extends EditText {
private void init() {
this.setOnKeyListener(new View.OnKeyListener() {
@Override // hardware keyboard
public boolean onKey(View v, int keyCode, KeyEvent event) {
System.out.println("onKey");
return false;
}
});
this.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable s) { }
public void beforeTextChanged(CharSequence s, int start, int count, int after) { }
public void onTextChanged(CharSequence s, int start, int before, int count) {
System.out.println("onTextChanged");
}
});
}
@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
return new ZanyInputConnection(super.onCreateInputConnection(outAttrs),
true);
}
private class ZanyInputConnection extends InputConnectionWrapper {
ZanyInputConnection(InputConnection target, boolean mutable) {
super(target, mutable);
}
@Override // soft keyboard
public boolean sendKeyEvent(KeyEvent event) {
System.out.println("sendKeyEvent");
return super.sendKeyEvent(event);
}
}
}
styles.xml :
<style name="SpaceLetterCode">
<item name="android:maxLength">1</item>
<item name="android:singleLine">true</item>
<item name="android:hint"> </item>
<item name="android:imeOptions">actionNext</item>
<item name="android:inputType">number|textNoSuggestions</item>
</style>
layout.xml :
<android.maps.api.test.com.myapplication.ZanyEditText
android:layout_height="50dp"
style="@style/SpaceLetterCode"
android:layout_width="match_parent"/>
以下是一些随机手机(全部来自软件键盘)的测试结果:
no
=没有触发任何内容no
之外的任何内容=触发事件的名称。 示例:当EditText已有1个字符时。我从软件键盘发送输入,我只被sendKeyEvent
解雇,sendKeyEvent
列中的交叉点为Char when full
我可以做些什么来检测所有设备中的这些事件吗?
更新1 : 我对人们如何解决这个问题进行了一些研究。 Lyft应用程序最终会使用自定义键盘(我的意思是屏幕上有11个按钮)。我想原生键盘没有解决方案。