1

在我的应用程序中,我希望我的用户在某些事件之后填写EditText。为了做到这一点,我要求专注于此EditText并尝试使用以下代码显示键盘:

public void onGivenEvent(int which) {
  mMyDialog.dismiss(getActivity());
  mMyEditField.requestFocus();
  InputMethodManager imm =
      (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
  imm.showSoftInput(mMyEditField, InputMethodManager.SHOW_IMPLICIT);
}

xmlmMyEditField看起来像这样:

<EditText
  android:id="@+id/edit_field"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:layout_gravity="center"
  android:layout_marginLeft="10dp"
  android:background="@null"
  android:digits="0123456789.,"
  android:freezesText="true"
  android:hint="some hint"
  android:imeOptions="actionDone"
  android:inputType="numberDecimal"
  android:maxLength="15"
  android:selectAllOnFocus="true"
  android:singleLine="true"
  android:textColor="@android:color/black"
  android:textSize="16sp" />

有趣的是,这段代码在第一次尝试时没有显示键盘。当此代码执行一次时,设备旋转键盘正确显示后。android:selectAllOnFocus="true"我遇到了无法正常工作的类似问题,但我使用了解决方法 - 我OnFocusChangeListenermMyEditField.selectAll()里面设置。

任何想法如何解决这个问题?

4

1 回答 1

0

从您的 onGivenEvent() 函数调用此方法

public void showSoftKeyboard() {
        try {
            InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE);
            inputMethodManager.toggleSoftInputFromWindow(getCurrentFocus().getWindowToken(), InputMethodManager.SHOW_FORCED, 0);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
于 2013-08-23T11:52:45.830 回答