全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Android软键盘状态弹出与消失的示例

最近遇到了关于软键盘的问题,需要获取到软键盘的状态,是否在显示 ,记录一下,方便以后查阅。网上常见的判定状态方法

复制代码 代码如下:
getWindow().getAttributes().softInputMode== WindowManager.LayoutParams.SOFT_INPUT_STATE_UNSPECIFIED 

来判断软键盘是否打开,若相等则为打开。试了之后,发现这个只对手机自带的键盘有作用,对安装的第三方的输入法没有效果。

还有介绍使用InputMethodManager 来获取键盘状态,代码如下

 InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
 boolean isOpen=imm.isActive();//isOpen若返回true,则表示输入法打开

这种并不能实时获取到键盘的状态,对我依然没有效果。

后来找到的解决方法,监听屏幕的变化,代码如下:

import android.app.Activity;
import android.content.Context;
import android.graphics.Rect;
import android.os.Build;
import android.util.Log;
import android.util.TypedValue;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;

/**
 * 
 * 软键盘的监听
 */

public class KeyBoardShowListener {
  private Context ctx;

  public KeyBoardShowListener(Context ctx) {
    this.ctx = ctx;
  }
  OnKeyboardVisibilityListener keyboardListener;

  public OnKeyboardVisibilityListener getKeyboardListener() {
    return keyboardListener;
  }

  public interface OnKeyboardVisibilityListener {


    void onVisibilityChanged(boolean visible);
  }

  public void setKeyboardListener(final OnKeyboardVisibilityListener listener, Activity activity) {
    final View activityRootView = ((ViewGroup) activity.findViewById(android.R.id.content)).getChildAt(0);

    activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {

      private boolean wasOpened;

      private final int DefaultKeyboardDP = 100;

      // From @nathanielwolf answer... Lollipop includes button bar in the root. Add height of button bar (48dp) to maxDiff
      private final int EstimatedKeyboardDP = DefaultKeyboardDP + (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP ? 48 : 0);

      private final Rect r = new Rect();

      @Override
      public void onGlobalLayout() {
        // Convert the dp to pixels.
        int estimatedKeyboardHeight = (int) TypedValue
            .applyDimension(TypedValue.COMPLEX_UNIT_DIP, EstimatedKeyboardDP, activityRootView.getResources().getDisplayMetrics());

        // Conclude whether the keyboard is shown or not.
        activityRootView.getWindowVisibleDisplayFrame(r);
        int heightDiff = activityRootView.getRootView().getHeight() - (r.bottom - r.top);
        boolean isShown = heightDiff >= estimatedKeyboardHeight;

        if (isShown == wasOpened) {
          Log.e("Keyboard state", "Ignoring global layout change...");
          return;
        }

        wasOpened = isShown;
        listener.onVisibilityChanged(isShown);
      }
    });
  }
}

用法如下:

//监听软键盘的状态
new KeyBoardShowListener(Activity.this).setKeyboardListener(
    new KeyBoardShowListener.OnKeyboardVisibilityListener() {
      @Override
      public void onVisibilityChanged(boolean visible) {
        if (visible) {
          //软键盘已弹出
          
        } else {
          //软键盘未弹出
          
        }
      }
    }, Activity.this);

以下是可能会遇到的一些情况:

绑定软键盘到EditText

edit.setFocusable(true);
edit.setFocusableInTouchMode(true);
edit.requestFocus();
InputMethodManager inputManager = (InputMethodManager)edit.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.showSoftInput(edit, 0);

去除软键盘显示:

editMsgView.setText("");
editMsgView.clearFocus();
//close InputMethodManager
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(editMsgView.getWindowToken(), 0);

始终不弹出软件键盘

复制代码 代码如下:
EditText edit=(EditText)findViewById(R.id.edit); edit.setInputType(InputType.TYPE_NULL);

也可以:

InputMethodManager imm = (InputMethodManager)v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
if(imm.isActive()){ //这里可以判断也可以不判断
imm.hideSoftInputFromWindow(v.getApplicationWindowToken(), 0 );
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# android  # 弹出软键盘  # 软键盘消失  # 软键盘不消失  # 解析android中隐藏与显示软键盘及不自动弹出键盘的实现方法  # Android中监听软键盘显示状态实现代码  # Android 显示和隐藏软键盘的方法(手动)  # Android软键盘弹出时的界面控制方法  # Android开发软键盘遮挡登陆按钮的完美解决方案  # Android编程之软键盘的隐藏显示实例详解  # Android开发之软键盘用法实例分析  # Android软键盘遮挡的四种完美解决方案  # Android判断软键盘弹出并隐藏的简单完美解决方法(推荐)  # 页面未随软键盘上升及android隐藏软键盘总结  # Android判断软键盘的状态和隐藏软键盘的简单实例  # 弹出  # 对我  # 并不能  # 自带  # 第三方  # 解决方法  # 只对  # 则为  # 试了  # 绑定  # 大家多多  # 网上  # TypedValue  # view  # util  # Log  # ViewTreeObserver  # public 


相关文章: Python路径拼接规范_跨平台处理说明【指导】  如何获取上海专业网站定制建站电话?  rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted  建站主机系统SEO优化与智能配置核心关键词操作指南  网站制作软件免费下载安装,有哪些免费下载的软件网站?  用v-html解决Vue.js渲染中html标签不被解析的问题  如何在万网自助建站中设置域名及备案?  如何快速搭建安全的FTP站点?  建站之星Pro快速搭建教程:模板选择与功能配置指南  小程序网站制作需要准备什么资料,如何制作小程序?  网站制作外包价格怎么算,招聘网站上写的“外包”是什么意思?  官网自助建站平台指南:在线制作、快速建站与模板选择全解析  广州网站建站公司选择指南:建站流程与SEO优化关键词解析  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧  公司网站制作费用多少,为公司建立一个网站需要哪些费用?  网站建设制作需要多少钱费用,自己做一个网站要多少钱,模板一般多少钱?  如何制作一个表白网站视频,关于勇敢表白的小标题?  矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?  制作网站的软件免费下载,免费制作app哪个平台好?  Swift中switch语句区间和元组模式匹配  如何选择可靠的免备案建站服务器?  制作旅游网站html,怎样注册旅游网站?  定制建站流程步骤详解:一站式方案设计与开发指南  如何高效完成独享虚拟主机建站?  如何在Golang中实现微服务服务拆分_Golang微服务拆分与接口管理方法  MySQL查询结果复制到新表的方法(更新、插入)  洛阳网站制作公司有哪些,洛阳的招聘网站都有哪些?  如何在Windows环境下新建FTP站点并设置权限?  Python如何创建带属性的XML节点  如何在云服务器上快速搭建个人网站?  如何在服务器上配置二级域名建站?  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  广州营销型建站服务商推荐:技术优势与SEO优化解析  完全自定义免费建站平台:主题模板在线生成一站式服务  阿里云网站搭建费用解析:服务器价格与建站成本优化指南  较简单的网站制作软件有哪些,手机版网页制作用什么软件?  详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)  如何在腾讯云服务器上快速搭建个人网站?  网站网页制作电话怎么打,怎样安装和使用钉钉软件免费打电话?  如何快速搭建二级域名独立网站?  网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?  导航网站建站方案与优化指南:一站式高效搭建技巧解析  代购小票制作网站有哪些,购物小票的简要说明?  建站主机与服务器功能差异如何区分?  建站之星安装模板失败:服务器环境不兼容?  如何在IIS服务器上快速部署高效网站?  设计网站制作公司有哪些,制作网页教程?  如何在Golang中指定模块版本_使用go.mod控制版本号  微信小程序 五星评分(包括半颗星评分)实例代码  邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。