我有这个View Pager,它有一组页面。当用户在第一页上时,键盘弹出。当我滑过页面时,键盘没有关闭(这就是它的实现方式)。现在,当我在第四页或第五页时,我明确尝试使用以下代码关闭键盘,但它不起作用。有人告诉我,这是因为键盘是在一个单独的页面上打开的(通过不同的片段)。
InputMethodManager imm = (InputMethodManager)Context.GetSystemService(Activity.InputMethodService);
View v = ((Activity)context).CurrentFocus;
if (v == null)
return;
imm.HideSoftInputFromWindow(WindowToken, 0);
如何在这里映射windowtoken。我猜它用于联系打开键盘的视图窗口。但是,不要将寻呼机中的所有页面显示在同一窗口上,基本上具有相同的标记。如果是这样,为什么它不起作用
答案 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();