为什么或什么时候InputMethodManager.showSoftInput返回false?

时间:2016-01-27 04:03:37

标签: android android-softkeyboard

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

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

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

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

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

有人可以向我解释发生了什么事吗?

5 个答案:

答案 0 :(得分:1)

manifest.xml文件中,添加

<activity android:name=".YourActivity"
          android:windowSoftInputMode="stateAlwaysVisible" />

到您要在其发布时显示键盘的活动名称

答案 1 :(得分:1)

试试这个:

//  CREATE COMBO BOX
    HWND hWndComboBox = CreateWindow (
        WC_COMBOBOX,
        TEXT(""),
        CBS_DROPDOWN | CBS_HASSTRINGS | WS_VISIBLE | WS_CHILD | WS_BORDER,
        10, 20, 70, 17,
        hwnd, NULL, NULL, NULL);

//  ADD 2 ITEMS
    SendMessage (
        hWndComboBox,
        (UINT) CB_ADDSTRING,
        (WPARAM) 0, (LPARAM) TEXT ("Item 1"));
    SendMessage (
        hWndComboBox,
        (UINT) CB_ADDSTRING,
        (WPARAM) 0, (LPARAM) TEXT ("Item 2"));

//  SEND THE CB_SETCURSEL MESSAGE TO DISPLAY AN INITIAL ITEM IN SELECTION FIELD
    SendMessage (hWndComboBox, CB_SETCURSEL, (WPARAM) 1, (LPARAM) 0);

  <activity
  ...
  android:windowSoftInputMode="stateVisible" >
 </activity>

答案 2 :(得分:0)

您也可以通过编程方式执行此操作

InputMethodManager inputMethodManager=(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.toggleSoftInputFromWindow(linearLayout.getApplicationWindowToken(), InputMethodManager.SHOW_FORCED, 0);

答案 3 :(得分:0)

你只需要打电话给他,试试这个:

EditText editText= (EditText) findViewById(R.id.editText);
InputMethodManager manager = (InputMethodManager)     
getSystemService(Context.INPUT_METHOD_SERVICE);
manager.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);

答案 4 :(得分:0)

你在使用碎片吗?我发现showSoftInput()在片段中不可靠。

在检查源代码后,我发现在requestFocus() / onCreate()onCreateView()中调用onResume()并不会立即导致对象被聚焦。这是最相似的,因为还没有创建内容视图。因此,焦点会在活动或片段初始化期间的某个时间发生。

我在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);
    }
}

即使您没有使用碎片,我也打赌适用相同的规则。因此,请确保在调用showSoftInput()之前创建了View。