我正在推出这样的软键盘:
InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.toggleSoftInputFromWindow(buttonLayout.getApplicationWindowToken(), InputMethodManager.SHOW_FORCED, 0);
buttonLayout
是我的UI上的一个简单按钮。
如何提取用户写的内容(不使用 EditText
田野或者隐藏着 EditText
)所以用户无法看到或点击它?
我也面临同样的问题。如果我隐藏编辑文本, 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()
给我用键盘输入的文字。
如果没有EditText,您将会遇到困难。
InputMethod需要连接到视图。无论您使用哪种视图,都需要覆盖 onCreateInputConnection
返回自定义 InputConnection
至少实现commitText(用于单词输入)的对象, deleteSurroundingText
(对于删除),和 sendKeyEvent
(对于假设您处于哑模式的键盘)以及所有完成功能。输入连接是复杂的事情,如果你没有把它搞定,你会搞砸第三方键盘,如Swiftkey和Swype。我真的不建议这样做。
如果你想这样做,你最好的机会就是声称你的窗户是一个 TYPE_NULL
输入类型。大多数键盘都会自行愚蠢,并假设您只接受该模式下最简单的命令。但你不能指望它。
我看看 InputConnection
由...返回 EditText
尽可能多地分类并复制它。
我会给你一个简单而简短的技巧,我已经测试并且工作得非常好
创建一个 EditText
同 0dp
身高和 0dp
宽度使用户不会看到 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
}
});