Android TextField:以编程方式设置焦点+软输入

在我看来,我有一个搜索EditText,我希望以编程方式触发该字段上的单击事件的行为,即将焦点对准文本字段并在必要时显示软键盘(如果没有可用的硬键盘)。

我试过field.requestFocus() 。 该字段实际上获得焦点,但不显示软键盘。

我试过field.performClick() 。 但是,只调用该字段的OnClickListener。

任何想法 ?


好的先生,试试这个:

edittext.setFocusableInTouchMode(true);
edittext.requestFocus();

林不知道,但这可能需要在一些手机(一些较旧的设备):

final InputMethodManager inputMethodManager = (InputMethodManager) context
                .getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.showSoftInput(edittext, InputMethodManager.SHOW_IMPLICIT);

这是为我工作的代码。

edittext.post(new Runnable() {
    public void run() {
        edittext.requestFocusFromTouch();
        InputMethodManager lManager = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); 
        lManager.showSoftInput(edittext, 0);
    }
});

而已! 请享用 ;)


下面的代码适用于我 ,在另外两个答案不适用于我之后

@Override
public void onResume() {
    super.onResume();
    SingletonBus.INSTANCE.getBus().register(this);
    //passwordInput.requestFocus(); <-- that doesn't work
    passwordInput.postDelayed(new ShowKeyboard(), 300); //250 sometimes doesn't run if returning from LockScreen
}

ShowKeyboard在哪里

private class ShowKeyboard implements Runnable {
    @Override
    public void run() {
        passwordInput.setFocusableInTouchMode(true);
  //      passwordInput.requestFocusFromTouch();
        passwordInput.requestFocus();            
        getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
        ((InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE)).showSoftInput(passwordInput, 0);
    }
}

输入成功后,我也确定我隐藏了键盘

getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
((InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE))
                    .hideSoftInputFromWindow(getView().getWindowToken(), 0);

从技术上讲,我只是在运行软键盘显示请求之前添加了300毫秒的延迟。 奇怪,对吧? requestFocus()更改为requestFocusFromTouch()

编辑:不要使用requestFocusFromTouch()它给发射器一个触摸事件。 坚持使用requestFocus()

编辑2:在对话框( DialogFragment )中,使用以下内容

getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);

代替

getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
链接地址: http://www.djcxy.com/p/24219.html

上一篇: Android TextField : set focus + soft input programmatically

下一篇: When the soft keyboard appears, it makes my EditText field lose focus