当编辑文本单击时,FAB响应,FAB出现键盘

时间:2017-02-11 11:30:22

标签: android floating-action-button

我正在使用Google新设计支持库中的FAB。我的屏幕有长形和FAB。我希望软键盘打开时FAB消失。找不到检测软键盘打开的方法。还有其他选择

我无法将监听器设置为EditText,因为它们都包含在不同的Fragment中,并且焦点更改侦听器在另一个Fragment中不可用。

我已经在主Activity中实现了FAB,所以我无法隐藏EditText焦点监听器的键盘监听器。任何人都可以与我分享解决方案。

2 个答案:

答案 0 :(得分:2)

没有直接的方法可以知道软键盘何时打开,但您可以执行以下操作:

contentView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {

    Rect r = new Rect();
    contentView.getWindowVisibleDisplayFrame(r);
    int screenHeight = contentView.getRootView().getHeight();

    // r.bottom is the position above soft keypad or device button.
    // if keypad is shown, the r.bottom is smaller than that before.
    int keypadHeight = screenHeight - r.bottom;

    if (keypadHeight > screenHeight * 0.15) {
        // keyboard is opened
        // Hide your FAB here
    }
    else {
        // keyboard is closed
    }
}
});

答案 1 :(得分:0)

您可以聆听键盘的打开和关闭。

 [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
    {
        if (ModelState.IsValid)
        {

            ApplicationDbContext context = new ApplicationDbContext();              
            var u = await UserManager.FindByEmailAsync(model.Email);
            bool passhash = false;
            if (u != null)
            {
                passhash = await UserManager.CheckPasswordAsync(u, model.Password);
            }

            if (u != null && passhash)
            {
                await SignInAsync(u, model.RememberMe);
                 return RedirectToLocal(returnUrl);
            }
            else
            {
                ModelState.AddModelError("", "Nom d'utilisateur ou mot de passe non valide.");
            }

        }

        return PartialView("~/views/MyAccount/_login.cshtml",model);

    }

此问题中列出了更详细的示例:SoftKeyboard open and close listener in an activity in Android?