【问题标题】:How to hide keyboard automatically after sending e-mail using emailIntent如何在使用电子邮件 Intent 发送电子邮件后自动隐藏键盘
【发布时间】:2012-04-20 12:49:25
【问题描述】:

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

如您所见,发送邮件后键盘并没有隐藏。

【问题讨论】:

  • 你找到解决办法了吗?
  • 这里有什么新东西吗?我也有同样的缺陷。

标签: android android-intent keyboard message


【解决方案1】:
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 方法中使用了该代码,它就像一个魅力。
【解决方案2】:

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

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

【讨论】:

  • 这是一个更优雅的解决方案,+1
【解决方案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 时,传入你当前的视图。后可运行线程将等待运行,直到视图完成加载,然后关闭键盘。

【讨论】:

  • 我在 onCreate 和电子邮件意图之后使用了您的 hideKeyboard() 方法。问题是它不起作用。发送电子邮件后,键盘似乎仍然处于活动状态。
  • 试着把它放在一个 postRunnable 线程中。我将编辑我的代码作为示例
【解决方案4】:

希望这对某人有所帮助:

@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>

【讨论】:

    【解决方案5】:

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

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

    【讨论】:

    • 不,我认为这里没有办法解决这个问题。发送电子邮件后,我需要访问 Gmail 应用程序才能隐藏键盘。
    【解决方案6】:

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

    您可以在 Android Manifest 中为该活动设置 android:windowSoftInputMode="adjustPan"。

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

    “活动的主窗口没有调整大小来为软键盘腾出空间。相反,窗口的内容会自动平移,以便当前焦点永远不会被键盘遮挡,用户可以随时看到他们正在输入的内容。这通常不如调整大小可取,因为用户可能需要关闭软键盘才能到达窗口的模糊部分并与之交互。”

    【讨论】:

      【解决方案7】:

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

      【讨论】:

        猜你喜欢
        • 2016-01-21
        • 1970-01-01
        • 1970-01-01
        • 2011-10-22
        • 2013-08-22
        • 1970-01-01
        • 2011-05-21
        相关资源
        最近更新 更多