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

时间:2012-04-20 12:49:25

标签: android android-intent keyboard message

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

enter image description here enter image description here enter image description here enter image description here

如您所见,发送邮件后键盘不会隐藏。

7 个答案:

答案 0 :(得分: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);
    }

答案 1 :(得分:4)

只需在清单中为希望活动添加以下代码即可:

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

答案 2 :(得分: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);
            }
        });
    }

当您调用hide / show Keyboard时,请传入当前视图。可运行后的线程将等待运行,直到视图加载完毕,然后关闭键盘。

答案 3 :(得分: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>

答案 4 :(得分: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);
}

答案 5 :(得分:0)

尝试在StackOverflow上找到的每个解决方案后,似乎没有任何效果。最后我确实找到了一种强行关闭键盘的方法,但这并不理想。

你可以设置android:windowSoftInputMode =&#34; adjustPan&#34;在Android Manifest中进行该活动。

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

&#34;活动的主窗口未调整大小以便为软键盘腾出空间。相反,窗口的内容会自动平移,以便键盘不会遮挡当前焦点,用户可以随时看到他们正在键入的内容。这通常不如调整大小,因为用户可能需要关闭软键盘才能进入并与窗口的模糊部分进行交互。&#34;

答案 6 :(得分:-1)

我有类似的问题。 Gmail发送后会隐藏键盘。当您返回应用程序时,它会关注其他内容。如果您使用较慢的设备,您会看到gmail在发送消息后隐藏键盘。