我正在使用Google新设计支持库中的FAB。我的屏幕有长形和FAB。我希望软键盘打开时FAB消失。找不到检测软键盘打开的方法。还有其他选择
我无法将监听器设置为EditText
,因为它们都包含在不同的Fragment
中,并且焦点更改侦听器在另一个Fragment
中不可用。
我已经在主Activity
中实现了FAB,所以我无法隐藏EditText
焦点监听器的键盘监听器。任何人都可以与我分享解决方案。
答案 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?