Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何以编程方式关闭不属于当前窗口的键盘_Android_Android Fragments_Xamarin.android - Fatal编程技术网

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方法?