我正在推出这样的软键盘:
InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.toggleSoftInputFromWindow(buttonLayout.getApplicationWindowToken(), InputMethodManager.SHOW_FORCED, 0);
buttonLayout
是我的UI上的一个简单按钮。
如何提取用户写的内容(不使用EditText
字段或隐藏EditText
),以便用户无法查看或点击它?
答案 0 :(得分:5)
如果没有EditText,你将会遇到困难。
需要将InputMethod连接到视图。无论使用哪种视图,都需要覆盖onCreateInputConnection
以返回自定义InputConnection
对象,该对象至少实现commitText(用于单词输入),deleteSurroundingText
(用于删除)和{{1 (对于假设你处于哑模式的键盘)和所有完成功能。输入连接是复杂的事情,如果你没有把它搞定,你会搞砸第三方键盘如Swiftkey和Swype。我真的不建议这样做。
如果您想这样做,最好的机会就是宣称您的窗口是sendKeyEvent
输入类型。大多数键盘都会自行愚蠢,并假设您只接受该模式下最简单的命令。但你不能指望它。
我会查看TYPE_NULL
类返回的InputConnection
并尽可能多地复制它。
答案 1 :(得分:3)
我也面临同样的问题。如果我隐藏编辑文本,edtTxt.getText().toString()
始终为空。所以我一直喜欢
<EditText
android:id="@+id/edtTxt"
android:layout_width="0px"
android:layout_height="0px" />
因此用户无法看到。并点击按钮
edtTxt.requestFocus();
edtTxt.setText("");
InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.toggleSoftInputFromWindow(edtTxt.getApplicationWindowToken(), InputMethodManager.SHOW_FORCED,
0);
现在edtTxt.getText().toString()
给出了我用键盘输入的文字。
答案 2 :(得分:2)
我会给你一个简单的&amp;简短的技巧,我测试过并且工作得很好
创建一个EditText
高度为0dp
且宽度为0dp
的{{1}},这样用户就不会看到EditText
,即使它在那里可见。
<EditText
android:id="@+id/editText"
android:layout_width="0dp"
android:layout_height="0dp"
/>
单击此按钮后,请将焦点放在EditText
上,然后按照自己的方式打开键盘
buttonLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
editText.requestFocus();
InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); inputMethodManager.toggleSoftInputFromWindow(v.getApplicationWindowToken(), InputMethodManager.SHOW_FORCED, 0);
}
});
然后在TextWatcher()
中添加EditText
,另外您可以在EditText
方法中隐藏beforeTextChanged
,这是可选的。您的TextWatcher
看起来像这样
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
editText.setVisibility(View.INVISIBLE); //Optional
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
myString = editText.getText().toString(); //Here you will get what you want
}
});