微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Android - 打开软键盘并在没有对话框或布局或编辑文本的情况下获取值

如何解决Android - 打开软键盘并在没有对话框或布局或编辑文本的情况下获取值

有没有办法只打开软键盘,没有实际的对话框或输入字段,并在字符串中获取输入值? 键盘本身已经有一个“完成”按钮;我可以:按下一个按钮,键盘打开,带有自己的内置输入框,输入值,按“完成”,得到一个变量的结果。

soft keyboard input

解决方法

我会添加一个 editText 使其不可见,并将焦点放在它上面。明确显示:

editText = (EditText)findViewById(R.id.myTextViewId);
editText.requestFocus();
InputMethodManager imm = (InputMethodManager)getSystemService(this.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,InputMethodManager.HIDE_IMPLICIT_ONLY);

再次隐藏它

InputMethodManager imm = (InputMethodManager)   getSystemService(this.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(editText.getWindowToken(),0);
,

受 Tobias 建议和 this answer 的启发,我设计了一个不同的解决方案。 我创建了一个 AlertDialog 弹出窗口,其中包含一个 EditText。然后我在edittext中添加了一个延迟的“触摸”以打开软键盘,然后处理“完成”事件以获取输入值并关闭底层弹出窗口。下面是一些示例代码:

//Open an AlertDialog popup
AlertDialog.Builder builder = new AlertDialog.Builder(activity);

//create a simple EditText
final EditText input = new EditText(activity);
input.setInputType(InputType.TYPE_CLASS_NUMBER);
input.setImeOptions(EditorInfo.IME_ACTION_DONE);
builder.setView(input);

//touch into the EditText to open the softkeyboard (600ms delay)
new Handler().postDelayed(new Runnable() {
    public void run() {
        input.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(),SystemClock.uptimeMillis(),MotionEvent.ACTION_DOWN,0));
        input.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(),MotionEvent.ACTION_UP,0));
    }
},600);


alertDialog = builder.show();
AlertDialog finalAlertDialog = alertDialog;

//Handle Keyboard event to get value and close the popup
input.setOnEditorActionListener(new TextView.OnEditorActionListener() {
    @Override
    public boolean onEditorAction(TextView v,int actionId,KeyEvent event) {
        if ((event != null && (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) || (actionId <= EditorInfo.IME_ACTION_PREVIOUS)) {
            doOperation();
            finalAlertDialog.cancel();
        }
        return false;
    }
});

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。