3 回答
TA贡献1811条经验 获得超6个赞
事实证明,实际上我确实需要继承TextView并使用addTextChangedListener()添加我自己的TextWatcher实现,以便侦听软键事件。我找不到用普通的旧视图执行此操作的方法。
另一件事,对于那些将尝试这种技术的人;TextView默认情况下无法编辑文本,因此,如果要使实现可编辑(而不是子类化EditText,而我不想这样做),则还必须创建一个自定义InputConnection,如下所示:
/**
* MyInputConnection
* BaseInputConnection configured to be editable
*/
class MyInputConnection extends BaseInputConnection {
private SpannableStringBuilder _editable;
TextView _textView;
public MyInputConnection(View targetView, boolean fullEditor) {
super(targetView, fullEditor);
_textView = (TextView) targetView;
}
public Editable getEditable() {
if (_editable == null) {
_editable = (SpannableStringBuilder) Editable.Factory.getInstance()
.newEditable("Placeholder");
}
return _editable;
}
public boolean commitText(CharSequence text, int newCursorPosition) {
_editable.append(text);
_textView.setText(text);
return true;
}
}
然后,使用类似以下内容的方法覆盖onCheckisTextEditor和onCreateInputConnection:
@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
outAttrs.actionLabel = null;
outAttrs.label = "Test text";
outAttrs.inputType = InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS;
outAttrs.imeOptions = EditorInfo.IME_ACTION_DONE;
return new MyInputConnection(this, true);
}
@Override
public boolean onCheckIsTextEditor() {
return true;
}
之后,您应该拥有一个可以收听软键盘的视图,并且可以使用按键输入值执行任何操作。
- 3 回答
- 0 关注
- 481 浏览
添加回答
举报