android安卓软键盘适配,强制开启或隐藏软键盘,如何判断android的软键盘是否显示?

原帖链接: 跳转
工具类,拿走就能用

import android.app.Activity;
import android.content.Context;
import android.graphics.Rect;
import android.os.Build;
import android.util.DisplayMetrics;
import android.view.inputmethod.InputMethodManager;

/**

  • Created by ChenboCui on 2018/6/1.
    */
    public class SoftKeyboardUtils {

    /**

    • 隐藏或显示软键盘
    • 如果现在是显示调用后则隐藏 反之则显示
    • @param activity
      */
      public static void showORhideSoftKeyboard(Activity activity){
      InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
      imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
      }

    /**

    • 强制显示软键盘
    • @param activity
      */
      public static void showSoftKeyboard(Activity activity){
      InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
      imm.showSoftInput(activity.getWindow().getDecorView(),InputMethodManager.SHOW_FORCED);
      }

    /**

    • 强制隐藏软键盘
    • @param activity
      */
      public static void hideSoftKeyboard(Activity activity){
      InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
      imm.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0); //强制隐藏键盘
      }

    /**

    • 调用系统方法 强制隐藏软键盘
    • @param activity
      /
      public static void hideSystemSoftKeyboard(Activity activity){
      ((InputMethodManager)activity.getSystemService(Context.INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
      }
      /
      *
    • 判断软键盘是否显示方法
    • @param activity
    • @return
      */

    public static boolean isSoftShowing(Activity activity) {
    //获取当屏幕内容的高度
    int screenHeight = activity.getWindow().getDecorView().getHeight();
    //获取View可见区域的bottom
    Rect rect = new Rect();
    //DecorView即为activity的顶级view
    activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);
    //考虑到虚拟导航栏的情况(虚拟导航栏情况下:screenHeight = rect.bottom + 虚拟导航栏高度)
    //选取screenHeight2/3进行判断
    return screenHeight2/3 > rect.bottom+getSoftButtonsBarHeight(activity);
    }

    /**

    • 底部虚拟按键栏的高度
    • @return
      */
      @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
      private static int getSoftButtonsBarHeight(Activity activity) {
      DisplayMetrics metrics = new DisplayMetrics();
      //这个方法获取可能不是真实屏幕的高度
      activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);
      int usableHeight = metrics.heightPixels;
      //获取当前屏幕的真实高度
      activity.getWindowManager().getDefaultDisplay().getRealMetrics(metrics);
      int realHeight = metrics.heightPixels;
      if (realHeight > usableHeight) {
      return realHeight - usableHeight;
      } else {
      return 0;
      }
      }
      }}

      我一般都是这样使用:

      //点击返回按钮时判断软键盘状态,若软键盘开启则关闭、若软键盘关闭就直接退出
      if (SoftKeyboardUtils.isSoftShowing(RenActivity.this)){
      SoftKeyboardUtils.showORhideSoftKeyboard(RenActivity.this);
      }else {
      onBackPressed();
      }

      如果你调用强制显示\隐藏软键盘没反应,试试这样:

         et.postDelayed(new Runnable() {
      @Override
      public void run() {
      InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
      imm.showSoftInput(et.getEditText(),InputMethodManager.SHOW_FORCED);
      }
      },500);

      et就是布局中的需要使用软键盘的控件,像edittext;关闭软键盘也是一样;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值