在Android中输入EditText后如何隐藏键盘?

时间:2010-02-26 15:22:41

标签: android android-edittext

我有一个EditText和按钮与父母的底部对齐。

当我在其中输入文字并按下按钮保存数据时,虚拟键盘不会消失。

任何人都可以指导我如何隐藏键盘吗?

15 个答案:

答案 0 :(得分:115)

您可能还想在EditText中定义imeOptions。这样,按下完成后键盘就会消失:

<EditText
    android:id="@+id/editText1"
    android:inputType="text"
    android:imeOptions="actionDone"/>

答案 1 :(得分:112)

这应该有用。

InputMethodManager inputManager = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); 
inputManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(),InputMethodManager.HIDE_NOT_ALWAYS); 

请确保this.getCurrentFocus()不返回null,如果没有焦点则会返回。

答案 2 :(得分:19)

   mEtNumber.setOnEditorActionListener(new TextView.OnEditorActionListener() {

            @Override
            public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                if (actionId == EditorInfo.IME_ACTION_DONE) {
                    // do something, e.g. set your TextView here via .setText()
                    InputMethodManager imm = (InputMethodManager) v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
                    imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
                    return true;
                }
                return false;
            }
        });

和xml

  android:imeOptions="actionDone"

答案 3 :(得分:10)

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

答案 4 :(得分:4)

EditText actionlistener中包含的解决方案:

public void onCreate(Bundle savedInstanceState) {
    ...
    ...
    edittext = (EditText) findViewById(R.id.EditText01);
    edittext.setOnEditorActionListener(new OnEditorActionListener() {
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            if (event != null&& (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) {
                InputMethodManager in = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                in.hideSoftInputFromWindow(edittext.getApplicationWindowToken(),InputMethodManager.HIDE_NOT_ALWAYS);
            }
            return false;
        }
    });
    ...
    ...
}

答案 5 :(得分:4)

我没有看到有人使用这种方法:

editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
    @Override
    public void onFocusChange(View view, boolean focused) {
        InputMethodManager keyboard = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
        if (focused)
            keyboard.showSoftInput(editText, 0);
        else
            keyboard.hideSoftInputFromWindow(editText.getWindowToken(), 0);
    }
});

然后只需要关注editText:

editText.requestFocus();

答案 6 :(得分:2)

我发现这是因为我的EditText在输入时没有自动被解雇。

这是我的原始代码。

editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        if ( (actionId == EditorInfo.IME_ACTION_DONE) || ((event.getKeyCode() == KeyEvent.KEYCODE_ENTER) && (event.getAction() == KeyEvent.ACTION_DOWN ))) {

            // Do stuff when user presses enter

            return true;

        }

        return false;
    }
});

我通过删除行

解决了这个问题
return true;

用户按下后进行操作。

希望这有助于某人。

答案 7 :(得分:1)

过去几天一直在努力解决这个问题,并找到了一个非常有效的解决方案。在EditText外的任何地方进行触摸时,隐藏软键盘。

此处发布的代码:hide default keyboard on click in android

答案 8 :(得分:1)

只需记下这两行代码,其中输入选项将起作用。

InputMethodManager inputManager = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(view.getWindowToken(), 0);

答案 9 :(得分:0)

我使用此方法从编辑文本中删除键盘:

 public static void hideKeyboard(Activity activity, IBinder binder) {
    if (activity != null) {
        InputMethodManager inputManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
        if (binder != null && inputManager != null) {
            inputManager.hideSoftInputFromWindow(binder, 0);//HIDE_NOT_ALWAYS
            inputManager.showSoftInputFromInputMethod(binder, 0);
        }
    }
}

这种从活动中删除键盘的方法(在某些情况下不起作用 - 例如,当编辑文本时,键盘键合,丢失焦点,它将无法工作。但对于其他情况,它工作得很好,而你不必关心持有键盘的元素)

 public static void hideKeyboard(Activity activity) {
    if (activity != null) {
        InputMethodManager inputManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
        if (activity.getCurrentFocus() != null && inputManager != null) {
            inputManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0);
            inputManager.showSoftInputFromInputMethod(activity.getCurrentFocus().getWindowToken(), 0);
        }
    }
}

答案 10 :(得分:0)

您可以在顶部看到明确的答案。但我使用ArrayList<HashMap<String, HashMap<Integer, ArrayList<Integer>>>>();并且运作良好。我发布了这个答案,因为我无法在我的oncreatedialog中输入Item { states: [ State { name: "s1" }, State { name: "s2" }, State { name: "s3" } ] transitions: [ Transition { from: "s2"; to: "s1" ScriptAction { script: doSomething() } }, Transition { from: "s3"; to: "s1" ScriptAction { script: doSomethingElse() } } ] }

所以这是我的答案。如果你尝试过标记答案但没有奏效,你可以试试这个:

getDialog().getCurrentFocus()

答案 11 :(得分:0)

int klavStat = 1; // for keyboard soft/hide button
int inType;  // to remeber your default keybort Type

编辑器 - 是EditText字段

/// metod for onclick button ///
 public void keyboard(View view) {
        if (klavStat == 1) {
            klavStat = 0;

            inType = editor.getInputType();

            InputMethodManager imm = (InputMethodManager)
                    getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);


            editor.setInputType(InputType.TYPE_NULL);

            editor.setTextIsSelectable(true);



        } else {
            klavStat = 1;


            InputMethodManager imm = (InputMethodManager)
                    getSystemService(Context.INPUT_METHOD_SERVICE);

                imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, 0);

            editor.setInputType(inType);

        }
    }

如果您有anather EditText字段,则需要关注焦点更改

答案 12 :(得分:0)

您可以像这样轻松地为呼叫创建单例类:

public class KeyboardUtils {

    private static KeyboardUtils instance;
    private InputMethodManager inputMethodManager;

    private KeyboardUtils() {
    }

    public static KeyboardUtils getInstance() {
        if (instance == null)
            instance = new KeyboardUtils();
        return instance;
    }

    private InputMethodManager getInputMethodManager() {
        if (inputMethodManager == null)
            inputMethodManager = (InputMethodManager) Application.getInstance().getSystemService(Activity.INPUT_METHOD_SERVICE);
        return inputMethodManager;
    }

    @SuppressWarnings("ConstantConditions")
    public void hide(final Activity activity) {
        new Handler().post(new Runnable() {
            @Override
            public void run() {
                try {
                    getInputMethodManager().hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0);
                } catch (NullPointerException e) {
                    e.printStackTrace();
                }
            }
        });
    }
}

所以,之后可以在活动中调用下一个表格:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity);
        KeyboardUtils.getInstance().hide(this);
    }

}

答案 13 :(得分:0)

对于我来说,为了在按下“发送按钮”时隐藏键盘,我使用了可接受的答案,但将上下文更改为getApplication并添加了getWindow()。

#include<stdio.h>
int main()
{
    float no =2.34;
    int count =0;
    while(no!=((int)no))
    {
        count++;
        no=no*10;
    }
    printf("\t %d \n",count);
    return 0;
}

答案 14 :(得分:-2)

editText.setInputType(InputType.TYPE_NULL);