如何以编程方式关闭不属于当前窗口的键盘

时间:2017-01-20 04:13:16

标签: android android-fragments xamarin.android

我有这个View Pager,它有一组页面。当用户在第一页上时,键盘弹出。当我滑过页面时,键盘没有关闭(这就是它的实现方式)。现在,当我在第四页或第五页时,我明确尝试使用以下代码关闭键盘,但它不起作用。有人告诉我,这是因为键盘是在一个单独的页面上打开的(通过不同的片段)。

InputMethodManager imm = (InputMethodManager)Context.GetSystemService(Activity.InputMethodService);
View v = ((Activity)context).CurrentFocus;
if (v == null)
    return;
imm.HideSoftInputFromWindow(WindowToken, 0);

如何在这里映射windowtoken。我猜它用于联系打开键盘的视图窗口。但是,不要将寻呼机中的所有页面显示在同一窗口上,基本上具有相同的标记。如果是这样,为什么它不起作用

3 个答案:

答案 0 :(得分:1)

我们可以切换输入。这里使用这个 -

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);
    }
}

答案 1 :(得分:0)

检查这个方法。在我的应用程序中,这在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);
        }
    }

我希望它对你有用。

答案 2 :(得分:0)

使用Interface方法实施。

Interface类中创建方法:

public interface ShowHideKeyboard(){
      void showKeyBoard();
      void hideKeyBoard();
}

Interface

中实施Activity课程
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()方法。

((ShowHideKeyBoard) getActivity()).showKeyBoard();
((ShowHideKeyBoard) getActivity()).hideKeyBoard();