有一个页面,用户可以在需要时发送电子邮件、短信或致电其客人。问题是当用户向其客人发送电子邮件时,键盘并没有隐藏。即使我在解决这个问题时遇到了一个小问题,但似乎仍然很难找到类似的帖子来解决它。我还将制作屏幕截图并将它们放在这里。
 
 
 

如您所见,发送邮件后键盘并没有隐藏。
有一个页面,用户可以在需要时发送电子邮件、短信或致电其客人。问题是当用户向其客人发送电子邮件时,键盘并没有隐藏。即使我在解决这个问题时遇到了一个小问题,但似乎仍然很难找到类似的帖子来解决它。我还将制作屏幕截图并将它们放在这里。
 
 
 

如您所见,发送邮件后键盘并没有隐藏。
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 在发送消息后隐藏了键盘。