在片段中关闭软键盘

时间:2016-01-22 23:54:18

标签: android android-fragments

我找到了这个问题的一些答案,但没有一个对我有用。我的Fragment中有一个Edit文本,它会在应用程序启动时启动。当此片段打开时,软键盘也会弹出。我该如何防止这种情况发生?这就是我在片段中的onCreateView方法中所拥有的....

        try {
        InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(
                Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(userName.getWindowToken(), 0);
    }catch(Exception e) {
        e.printStackTrace();
    }

6 个答案:

答案 0 :(得分:7)

onCreateViewonActivityCreated中尝试此操作。

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

答案 1 :(得分:1)

我最近的项目我使用下面的代码来隐藏键盘布局,也许你可以试试。(我从Wordpress-android的源代码中学习它)

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_template_add_doc, container, false);
    //hide the keyboard if it is visible
    InputMethodManager imm = (InputMethodManager) getActivity()
            .getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(view.getApplicationWindowToken(), 0);
    return view;
}

答案 2 :(得分:1)

尝试以下逻辑隐藏键盘自动打开。

尝试将编辑文本放在单独的linearlayout中并设置android:focusableInTouchMode="true"。这将自动避免键盘自动打开。

  <LinearLayout
     android:id = "@+id/layout"
     android:layout_width = "wrap_content"
     android:layout_height = "wrap_content"
     android:focusable = "true"
     android:focusableInTouchMode = "true">

    <EditText
       android:id = "@+id/edit_text"
       android:layout_width = "match_content"
       android:layout_height = "wrap_content"/>
  </LinearLayout>

如果上述操作失败,请使用以下代码以编程方式隐藏。将其写为单独的函数并在代码中调用它。

在创建视图后,在片段中调用此方法,如下所示。

@Override
  public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
     hideKeyboard();
  }

public void hideKeyboard() {
    InputMethodManager inputMethodManager = (InputMethodManager) activity
            .getSystemService(android.content.Context.INPUT_METHOD_SERVICE);

    inputMethodManager.hideSoftInputFromWindow(
            activity.getCurrentFocus()
                    .getWindowToken(), 0);
  } // hideKeyboard

祝你好运..!

答案 3 :(得分:1)

这对我有用,试试这种方式

 @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {


hideKeyboard(getActivity());
}

    public static void hideKeyboard( Context context ) {

            try {
                InputMethodManager inputManager = ( InputMethodManager ) context.getSystemService( Context.INPUT_METHOD_SERVICE );

                View view = ( (Activity) context ).getCurrentFocus();
                if ( view != null ) {
                    inputManager.hideSoftInputFromWindow( view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS );
                }
            } catch ( Exception e ) {
                e.printStackTrace();
            }
        }

答案 4 :(得分:1)

您还可以在AndroidManifest.xml中将此行添加到片段活动中。

要添加的行:- android:windowSoftInputMode =“ stateHidden | adjustResize”

请参见下面的代码段:-

<activity android:name=".activity.FragmentActivity"
       android:windowSoftInputMode="stateHidden|adjustResize"/>

答案 5 :(得分:0)

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:focusable="true"
android:focusableInTouchMode="true"
android:background="@color/background_listview"
android:orientation="vertical">

在主上部布局中使用此功能     设置focusable true和android:focusableInTouchMode true

<强>机器人:可聚焦= “真”

<强>机器人:focusableInTouchMode = “真”