有一个页面,用户可以在需要时发送电子邮件、短信或致电其客人。问题是当用户向其客人发送电子邮件时,键盘并没有隐藏。即使我在解决这个问题时遇到了一个小问题,但似乎仍然很难找到类似的帖子来解决它。我还将制作屏幕截图并将它们放在这里。
如您所见,发送邮件后键盘并没有隐藏。
有一个页面,用户可以在需要时发送电子邮件、短信或致电其客人。问题是当用户向其客人发送电子邮件时,键盘并没有隐藏。即使我在解决这个问题时遇到了一个小问题,但似乎仍然很难找到类似的帖子来解决它。我还将制作屏幕截图并将它们放在这里。
如您所见,发送邮件后键盘并没有隐藏。
Intent sendIntent = new Intent(Intent.ACTION_SEND);
sendIntent.setType("text/plain");
sendIntent.putExtra(Intent.EXTRA_EMAIL,
new String[] { **EmailAddress** });
startActivityForResult(sendIntent, 1);
@Override
protected void onActivityResult(int arg0, int arg1, Intent arg2) {
super.onActivityResult(arg0, arg1, arg2);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
InputMethodManager inputManager = (InputMethodManager) activity
.getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(**AnyViewOfScreen**.getWindowToken(),
InputMethodManager.HIDE_NOT_ALWAYS);
}
}, 300);
}
只需在清单中为所需活动添加以下代码即可:
android:windowSoftInputMode="stateAlwaysHidden"
android:configChanges="keyboardHidden"
当键盘显示和隐藏自身时,它不是覆盖,但这是我用来根据需要隐藏和显示键盘的两种方法。
public void hideKeyboard(final View aView){
aView.post(new Runnable() {
@Override
public void run(){
InputMethodManager inputManager = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
}
}
}
public void showKeyboard(final View aView) {
aView.post(new Runnable() {
@Override
public void run() {
InputMethodManager inputMethodManager=(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.toggleSoftInputFromWindow(ListingScreen.this.getCurrentFocus().getWindowToken(), InputMethodManager.SHOW_FORCED, 0);
}
});
}
当您调用隐藏/显示键盘时,传入您的当前视图。后可运行线程将等待运行,直到视图完成加载,然后关闭键盘。
希望这可以帮助某人:
@Override
protected void onResume() {
super.onResume();
Log.d("OnResume", "Called");
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
InputMethodManager inputManager = (InputMethodManager) LocationDetailActivity.this
.getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(),
InputMethodManager.HIDE_NOT_ALWAYS);
}
}, 300);
}
如果您的布局中没有任何可聚焦的视图,只需将虚拟线性布局添加到您的 xml
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:focusable="true"
android:focusableInTouchMode="true">
<requestFocus />
</LinearLayout>
在您想要隐藏键盘的地方调用此方法(例如,当您单击发送电子邮件按钮时调用此方法)
protected void showVirturalKeyboard()
{
Timer timer = new Timer();
timer.schedule(new TimerTask()
{
@Override
public void run()
{
InputMethodManager m = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
if(m != null)
{
m.toggleSoftInput(0, InputMethodManager.HIDE_IMPLICIT_ONLY);
}
}
}, 100);
}
在尝试了我在 StackOverflow 上找到的所有解决方案后,似乎没有任何效果。最后我确实找到了一种强制关闭键盘的方法,但并不理想。
您可以在 Android Manifest 中为该活动设置 android:windowSoftInputMode="adjustPan"。
这里解释了这个不幸的副作用http://developer.android.com/guide/topics/manifest/activity-element.html#wsoft:
“活动的主窗口没有调整大小来为软键盘腾出空间。相反,窗口的内容会自动平移,这样当前的焦点就不会被键盘遮挡,用户总是可以看到他们正在输入的内容。这通常是不如调整大小可取,因为用户可能需要关闭软键盘才能到达窗口的模糊部分并与之交互。”
我有类似的问题。Gmail 发送后会隐藏键盘。当您返回应用程序时,它会专注于其他事情。如果您使用较慢的设备,您会看到 gmail 在发送消息后隐藏了键盘。