首页 > 编程知识 正文

Android如何点击其他区域收起软键盘

时间:2023-11-21 23:23:23 阅读:292098 作者:CVAQ

在Android应用中,当输入框获取焦点弹出软键盘后,我们希望能够点击其他区域使软键盘消失,以提升用户体验。本篇文章将说明如何实现这一功能。

一、获取焦点并显示软键盘

在Android中,当EditText等控件获取焦点后,系统会自动弹出软键盘。我们可以通过如下代码获取控件焦点并弹出软键盘:

  editText.requestFocus();
  InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
  imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);

二、点击其他区域收起软键盘

要实现点击其他区域收起软键盘,我们需要在布局文件中添加一个可点击的空间,例如一个普通的View:

  <RelativeLayout
      android:id="@+id/layout_main"
      android:layout_width="match_parent"
      android:layout_height="match_parent">

      <EditText
          android:id="@+id/edit_text"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:hint="请输入内容"/>

      <View
          android:id="@+id/view"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:background="#000000"
          android:alpha="0.5"/>

  </RelativeLayout>

然后在Activity中为View添加点击事件:

  View view = findViewById(R.id.view);
  view.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View view) {
          InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
          imm.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
          view.setVisibility(View.GONE);
      }
  });

其中,我们使用InputMethodManager的hideSoftInputFromWindow()方法来收起软键盘,使用setVisibility()方法将View隐藏。

三、优化收起软键盘触发事件

在上述代码中,View的点击事件是在用户点击屏幕时触发的,这可能会存在误触的情况。我们可以通过在Activity中重写onTouchEvent()方法,判断触摸点是否在EditText之外,来优化软键盘收起触发事件:

  @Override
  public boolean onTouchEvent(MotionEvent event) {
      if (event.getAction() == MotionEvent.ACTION_DOWN) {
          View v = getCurrentFocus();
          if (v instanceof EditText) {
              Rect outRect = new Rect();
              v.getGlobalVisibleRect(outRect);
              if (!outRect.contains((int) event.getRawX(), (int) event.getRawY())) {
                  v.clearFocus();
                  InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                  imm.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
                  view.setVisibility(View.GONE);
              }
          }
      }
      return super.onTouchEvent(event);
  }

通过获取当前焦点的View,判断触摸点是否在EditText之外,来触发软键盘收起操作。

四、总结

通过在布局文件中添加一个可点击的View,并为其添加点击事件,在Activity中判断触摸点是否在EditText之外,来实现Android点击其他区域收起软键盘的功能。这一方案可以避免用户误触,提升应用体验。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。