【发布时间】:2014-05-10 11:44:12
【问题描述】:
我在尝试检测软件键盘是否可见时遇到了一些问题。
我正在寻找解决方案(包括 SO),但没有运气。 奇怪的是,我在同一个应用程序中通过检查窗口大小是否已更改来执行此操作,如下所示:
final View activityRootView = findViewById(R.id.tlFull);
//tlFull is the activity table layout
activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(
new OnGlobalLayoutListener()
{
public void onGlobalLayout()
{
int heightDiff = activityRootView.getRootView()
.getHeight() - activityRootView.getHeight();
if (heightDiff > 100)
{
//did some stuff here
}
else
{
//and here
}
}
});
并通过添加 清单文件中的 android:windowSoftInputMode="adjustResize"。
现在我试图在登录活动中做同样的事情,但由于某种原因,heightDiff 总是 38,所以这不再有效。这同样适用于在 SO 上找到的所有使用相同方法的方法。
我也试过了,但它总是返回 true。
final View activityRootView = findViewById(R.id.tlFull);
activityRootView.getViewTreeObserver()
.addOnGlobalLayoutListener(new OnGlobalLayoutListener()
{
@Override
public void onGlobalLayout()
{
if (getResources().getConfiguration()
.keyboardHidden == Configuration.KEYBOARDHIDDEN_NO)
{}
else
{}
}
});
另外,因为我没有使用片段,所以我不能使用这个:
InputMethodManager imm = (InputMethodManager) getActivity()
.getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm.isAcceptingText())
{}
else
{}
我也尝试了不同的方法。 我在etPass(触发键盘的编辑文本)onClick方法中做我想做的事情:
etPass.setOnClickListener(new OnClickListener()
{
public void onClick(View viewIn)
{
ivImageView.setVisibility(View.GONE);
}
});
不幸的是,即使键盘出现,图像视图也不会总是在第一次点击时消失,所以我必须再次点击。
第二个问题是我试图在 onBackPressed() 方法中再次显示 iv。这行得通,但不是应该的。
当我第一次点击后退按钮时,键盘会消失,但我必须再次点击才能使图像可见。 (我尝试了此处提供的解决方案,但没有成功:EditText with soft keyboard and "Back" button)
此外,这可以防止应用程序在 onBackPressed() 上关闭。
关于如何解决这个问题以及为什么差异总是相同的任何想法? 我找不到更好的解决方案,现在我担心将来旧活动中可能会出现同样的问题(尽管它在测试中可以正常工作)
【问题讨论】:
-
试试这个方法,对我来说很可靠:stackoverflow.com/questions/4745988/…
标签: android keyboard android-edittext android-softkeyboard back