假设我在相同的布局中有一些观点,我打电话:
InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(someView.getWindowToken(), 0);
someView
是否重要?
我尝试了一个隐藏键盘的简单示例,但我没有注意到隐藏键盘方面的任何差异。微妙的差异在哪里出现?
答案 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和键盘可见),后面的键盘不会被关闭,因为对话框有自己的窗口。
所以,我会说不,在您尝试从附加到另一个窗口的视图(例如,从弹出对话框中)关闭键盘之前,它并不重要。