如何在使用emailIntent发送电子邮件后自动隐藏键盘

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

你找到解决方案了吗? - Poutrathor
这里有什么新的吗?我遇到了同样的缺陷。 - Mikey
7个回答

7
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);
    }

谢谢你提供这段代码,我在onResume方法中使用了它,效果非常好。 - Ganesh

5
很容易,只需在您的清单文件中为所需的活动添加以下代码即可:

android:windowSoftInputMode="stateAlwaysHidden"
android:configChanges="keyboardHidden"

这是一个更优雅的解决方案,+1 - Rodolfo Abarca

3
希望这能帮助到某些人:
@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>

3

当键盘显示和隐藏时,覆盖它不是一个好的选择,但以下是我使用的两种方法,根据需要隐藏和显示键盘。

    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);
            }
        });
    }

当您调用隐藏/显示键盘时,请传入当前视图。Post Runnable线程将等待视图加载完成后再运行,然后关闭键盘。

我在onCreate和发送电子邮件意图之后使用了你的hideKeyboard()方法。问题是它不起作用。发送电子邮件后键盘仍然处于活动状态。 - Aerial
尝试将其放入postRunnable线程中。我会编辑我的代码提供示例。 - coder

0

在尝试了StackOverflow上找到的每个解决方案后,似乎没有什么起作用。最终我找到了一种强制关闭键盘的方法,但这并不理想。

您可以在Android清单文件中为该活动设置android:windowSoftInputMode="adjustPan"。

这样做的不幸副作用在这里有所解释 http://developer.android.com/guide/topics/manifest/activity-element.html#wsoft

“活动的主窗口不会被调整大小以腾出空间给软键盘。相反,窗口的内容会自动平移,以便当前焦点永远不会被键盘遮挡,用户始终可以看到他们正在输入的内容。这通常不如调整大小好,因为用户可能需要关闭软键盘才能访问和与窗口的遮挡部分进行交互。”


0

在需要隐藏键盘的地方调用此方法(例如,当您点击发送电子邮件按钮时调用此方法)

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);
}

1
不,我认为这里没有解决问题的办法。我需要访问Gmail应用程序以在发送电子邮件后隐藏键盘。 - Aerial

-1

我曾经遇到过类似的问题。Gmail在发送邮件后会隐藏键盘,当你返回到应用程序时,它会聚焦于其他内容。如果你使用速度较慢的设备,你会发现Gmail在发送消息后会自动隐藏键盘。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接