我正在尝试首先以编程方式在屏幕上弹出软键盘(而不更改 list 中的windowSoftInputMode)。

有趣的是,在屏幕上第一次加载时,它根本没有用。这是代码块。

mEDT.requestFocus();
mEDT.requestFocusFromTouch();
mImm.showSoftInput(mEDT, InputMethodManager.SHOW_IMPLICIT);

showSoftInput返回false,这导致软键盘没有显示。

但是当我单击EditText时。 showSoftInput返回true,并显示软键盘。

谁能向我解释发生了什么事?

最佳答案

您正在使用 fragment 吗?我发现showSoftInput()在Fragments中不可靠。

检查源代码后,我发现在requestFocus()/onCreate()onCreateView()中调用onResume()不会立即导致对象被聚焦。这很可能是因为尚未创建内容 View 。因此,焦点发生在稍后的Activity或Fragment初始化期间。

我在showSoftInput()中调用onViewCreated()取得了更大的成功。

public class MyFragment extends Fragment {
    private InputMethodManager inputMethodManager;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_layout, container, false);

        EditText text1 = (EditText) view.findViewById(R.id.text1);
        text1.requestFocus();

        return view;
    }

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        InputMethodManager inputMethodManager = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
        inputMethodManager.showSoftInput(view.findFocus(), InputMethodManager.SHOW_IMPLICIT);
        super.onViewCreated(view, savedInstanceState);
    }
}

即使您不使用 fragment ,我敢打赌,同样的规则也适用。因此,请确保在调用showSoftInput()之前创建了View。

关于android - 为什么或何时InputMethodManager.showSoftInput返回false?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35028676/

10-11 15:00