Android软键盘仅在方向更改时消失

时间:2014-05-13 23:14:28

标签: android keyboard

只是想知道如何在应用程序从EditText收集输入后立即让软键盘消失。现在," Save"按钮收集文本并成功将EditText中的字符串设置为空白,但软键盘在方向切换之前不会消失。我尝试以编程方式隐藏软键盘,但它无法正常工作。

这是“保存”按钮代码:

    private OnClickListener saveButtonListener = new OnClickListener() {
    @Override
    public void onClick(View v) {
        if (newListEditText.getText().length() > 0) {  //Make sure the user actually wrote something
            addStore(newListEditText.getText().toString());  //Adds a button to view with name from EditText
            newListEditText.setText("");
            ((InputMethodManager) getSystemService(
                       Context.INPUT_METHOD_SERVICE)).hideSoftInputFromInputMethod(
                            newListEditText.getWindowToken(), 0);  //Supposed to hide soft keyboard but doesn't do it

我也尝试将代码[android:imeOptions =" actionDone"]插入到xml布局文件中,正如在回答类似问题时所建议的那样,但没有任何改变。

提前感谢您的意见!

3 个答案:

答案 0 :(得分:2)

只需替换它:

Context.INPUT_METHOD_SERVICE)).hideSoftInputFromInputMethod(  

用这个:

Context.INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(

答案 1 :(得分:0)

使用此代码执行此操作..

InputMethodManager ipmm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
ipmm.hideSoftInputFromWindow(url.getWindowToken(), 0);

你可以忽略并放置" null'代替url.getWindowToken()。

仅供参考 - 在我的案例/代码中,我使用了url作为通过editText收到的字符串,例如

inputText = (EditText) findViewById (R.id.edittext1); 
String url = inputText.getText().toString();

答案 2 :(得分:0)

尝试此代码,因此每当用户触摸其他部分pf屏幕,然后再编辑文本, 软键盘会消失。

因此,在您的情况下,如果用户已完成文本并尝试触摸按钮,则此功能将起作用。

    @Override
public boolean dispatchTouchEvent(MotionEvent event) {

    View v = getCurrentFocus();
    boolean ret = super.dispatchTouchEvent(event);

    if (v instanceof EditText) {
        View w = getCurrentFocus();
        int scrcoords[] = new int[2];
        w.getLocationOnScreen(scrcoords);
        float x = event.getRawX() + w.getLeft() - scrcoords[0];
        float y = event.getRawY() + w.getTop() - scrcoords[1];

         Log.d("Activity",
         "Touch event " + event.getRawX() + "," + event.getRawY()
         + " " + x + "," + y + " rect " + w.getLeft() + ","
         + w.getTop() + "," + w.getRight() + ","
         + w.getBottom() + " coords " + scrcoords[0] + ","
         + scrcoords[1]);
        if (event.getAction() == MotionEvent.ACTION_UP
                && (x < w.getLeft() || x >= w.getRight() || y < w.getTop() || y > w
                        .getBottom())) {
            InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(getWindow().getCurrentFocus()
                    .getWindowToken(), 0);
        }
    }
    return ret;
}