尝试隐藏键盘时,我使用哪种视图?

时间:2014-03-18 18:37:23

标签: android

假设我在相同的布局中有一些观点,我打电话:

InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(someView.getWindowToken(), 0);

someView是否重要?

我尝试了一个隐藏键盘的简单示例,但我没有注意到隐藏键盘方面的任何差异。微妙的差异在哪里出现?

1 个答案:

答案 0 :(得分:1)

实际上,直到此视图来自同一窗口,似乎并不重要。 正如文件所说View.getWindowToken()

  

检索标识此视图附加窗口的唯一标记   到。

所有活动视图都附加到同一窗口。因此,您将从每个视图中获得相同的令牌。

但是,如果您有键盘可见并显示一些对话框。假设此对话框将具有一些自定义视图:

<强> dialog_layout.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content">
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/tryHideKeyboard"
        android:text="Try hide keyboard"/>
</LinearLayout>

<强> TestDialogFragment.java

public class TestDialogFragment extends DialogFragment {

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        final View view = LayoutInflater.from(getActivity()).inflate(R.layout.dialog_layout, null);

        view.findViewById(R.id.tryHideKeyboard).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(final View v) {
                final InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
            }
        });

        // Use the Builder class for convenient dialog construction
        final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setMessage("Test dialog")
                .setView(view)
                .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(final DialogInterface dialog, final int which) {
                        // nothing to do
                    }
                });
        // Create the AlertDialog object and return it
        return builder.create();
    }
}

然后按对话框中的Try hide keyboard按钮(在活动中打开,例如主布局上的EditText和键盘可见),后面的键盘不会被关闭,因为对话框有自己的窗口。

所以,我会说不,在您尝试从附加到另一个窗口的视图(例如,从弹出对话框中)关闭键盘之前,它并不重要。