Android 如何以编程方式关闭不属于当前窗口的键盘
我有一个查看页面,它有一组页面。当用户在第一页时,键盘弹出。当我浏览页面时,键盘没有关闭(这就是它的实现方式)。现在,当我在第四或第五页时,我显式地尝试使用以下代码关闭键盘,但它不起作用。有些东西告诉我,这是因为键盘是在一个单独的页面上打开的(由不同的片段)Android 如何以编程方式关闭不属于当前窗口的键盘,android,android-fragments,xamarin.android,Android,Android Fragments,Xamarin.android,我有一个查看页面,它有一组页面。当用户在第一页时,键盘弹出。当我浏览页面时,键盘没有关闭(这就是它的实现方式)。现在,当我在第四或第五页时,我显式地尝试使用以下代码关闭键盘,但它不起作用。有些东西告诉我,这是因为键盘是在一个单独的页面上打开的(由不同的片段) windowtoken如何映射到此处。我猜它是用来关联打开键盘的视图窗口的。但寻呼机中的所有页面不都显示在同一个窗口中,本质上具有相同的标记吗。如果是这样,为什么它不工作呢?检查这个方法。在我的应用程序中,这个方法在viewpager中也可
windowtoken如何映射到此处。我猜它是用来关联打开键盘的视图窗口的。但寻呼机中的所有页面不都显示在同一个窗口中,本质上具有相同的标记吗。如果是这样,为什么它不工作呢?检查这个方法。在我的应用程序中,这个方法在viewpager中也可以正常工作
public void hideKeyboard(Activity activity) {
// Check if no view has focus:
View view = activity.getCurrentFocus();
if (view != null) {
InputMethodManager inputManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
}
}
我希望它对您有用。不过我们可以切换输入。这里用这个-
public static void toggle(Activity activity){
InputMethodManager imm = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
if (imm.isActive()){
// Hide keyboard
imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0);
} else {
// Show keyboard
imm.toggleSoftInput(0, InputMethodManager.HIDE_IMPLICIT_ONLY);
}
}
使用
接口
方法实现
在接口
类中创建方法:
public interface ShowHideKeyboard(){
void showKeyBoard();
void hideKeyBoard();
}
在活动中实施接口
类
:
public class YourActivity extends AppCompactActivity implements ShowHideKeyboard{
@Override
public void hideKeyBoard() {
View view = this.getActivity().getCurrentFocus();
if (view != null) {
view.clearFocus();
InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
}
@Override
public void showKeyboard() {
((InputMethodManager)
(getActivity())
.getSystemService(Context.INPUT_METHOD_SERVICE))
.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);
}
}
调用showKeyBoard()
和hideKeyBoard()
方法,在其中显示或隐藏片段
InputMethodManager imm = (InputMethodManager)Context.GetSystemService(Activity.InputMethodService);
View v = ((Activity)context).CurrentFocus;
if (v == null)
return;
imm.HideSoftInputFromWindow(WindowToken, 0);
((ShowHideKeyBoard) getActivity()).showKeyBoard();
((ShowHideKeyBoard) getActivity()).hideKeyBoard();
我已经试过了。它不起作用。我目前没有任何焦点视图。@Dibzmania plz chk此链接无法回答我的问题。您基本上已经展示了我所做的,只是以一种奇特的方式,您必须在需要的地方逐页调用hide/show方法?