要设置弹出键盘是否覆盖Activity的view,或者软键盘的显示隐藏状态,需要用到Activity的一个属性:

android:windowSoftInputMode

该属性在AndroidManifest.xml中设置,如下:

"stateUnchanged", "stateHidden",

"stateAlwaysHidden", "stateVisible",

"stateAlwaysVisible", "adjustUnspecified",

"adjustResize", "adjustPan"] …… >

值-----描述

"stateUnspecified"-----软键盘的状态 (是否它是隐藏或可见 )没有被指定。系统将选择一个合适的状态或依赖于主题的设置。

这个是为了软件盘行为默认的设置。

"stateUnchanged"-----软键盘被保持无论它上次是什么状态,是否可见或隐藏,当主窗口出现在前面时。

"stateHidden"-----当用户选择该Activity时,软键盘被隐藏——也就是,当用户确定导航到该Activity时,而不是返回到它由于离开另一个Activity。

"stateAlwaysHidden"-----软键盘总是被隐藏的,当该Activity主窗口获取焦点时。

"stateVisible"-----软键盘是可见的,当那个是正常合适的时(当用户导航到Activity主窗口时)。

"stateAlwaysVisible"-----当用户选择这个Activity时,软键盘是可见的——也就是,也就是,当用户确定导航到该Activity时,而不是返回到它由于离开另一个Activity。

"adjustUnspecified"-----它不被指定是否该Activity主 窗口调整大小以便留出软键盘的空间,或是否窗口上的内容得到屏幕上当前的焦点是可见的。系统将自动选择这些模式中一种主要依赖于是否窗口的内容有任何布局 视图能够滚动他们的内容。如果有这样的一个视图,这个窗口将调整大小,这样的假设可以使滚动窗口的内容在一个较小的区域中可见的。这个是主窗口默认的行为 设置。

"adjustResize"-----该Activity主窗口总是被调整屏幕的大小以便留出软键盘的空间

"adjustPan"-----该Activity主窗口并不调整屏幕的大小以便留出软键盘的空间。相反,当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分。这个通常是不期望比调整大小,因为用户可能关闭软键盘以便获得与被覆盖内容的交互操作。

下面就是正题了。目前经手的项目有聊天界面,需要做成类似QQ聊天室当键盘显示的时候表情栏隐藏,(由于个人布局问题导致各种键盘监听事件都没办彻底隐藏掉表情栏);思路如下,获取键盘状态是否显示。显示状态,判断表情有没有显示,如果显示就隐藏,没显示就不做动作。键盘消失状态,点击表情按钮,键盘消失表情显示,

第一种房间比较简单:

InputMethodManager imm = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE);

if(imm.hideSoftInputFromWindow(editText.getWindowToken(), 0))  {

imm.showSoftInput(editText,0);

//软键盘已弹出

}  else  {

//软键盘未弹出

}

但是这种在多布局情况fragment使用众多的情况好像不好使。

在看第二种 需要自己去定义个布局文件:

package com.demo.softkeyboard;

import com.demo.softkeyboard.KeyboardListenRelativeLayout.IOnKeyboardStateChangedListener;

import android.app.Activity;

import android.os.Bundle;

import android.view.View;

import android.widget.EditText;

import android.widget.TextView;

/**

* 软键盘监听Demo

* @author qiaoning

*

*/

public class SoftKeyboardListenDemoActivity extends Activity {

private EditText editText;

KeyboardListenRelativeLayout relativeLayout;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

relativeLayout = (KeyboardListenRelativeLayout) findViewById(R.id.keyboardRelativeLayout);

editText = (EditText) findViewById(R.id.editText);

relativeLayout.setOnKeyboardStateChangedListener(new IOnKeyboardStateChangedListener() {

public void onKeyboardStateChanged(int state) {

switch (state) {

case KeyboardListenRelativeLayout.KEYBOARD_STATE_HIDE://软键盘隐藏

editText.setVisibility(View.VISIBLE);

break;

case KeyboardListenRelativeLayout.KEYBOARD_STATE_SHOW://软键盘显示

editText.setVisibility(View.GONE);

break;

default:

break;

}

}

});

}

}

用法

import com.demo.softkeyboard.KeyboardListenRelativeLayout.IOnKeyboardStateChangedListener;

import android.app.Activity;

import android.os.Bundle;

import android.view.View;

import android.widget.EditText;

import android.widget.TextView;

/**

* 软键盘监听Demo

* @author qiaoning

*

*/

public class SoftKeyboardListenDemoActivity extends Activity {

private EditText editText;

KeyboardListenRelativeLayout relativeLayout;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

relativeLayout = (KeyboardListenRelativeLayout) findViewById(R.id.keyboardRelativeLayout);

editText = (EditText) findViewById(R.id.editText);

relativeLayout.setOnKeyboardStateChangedListener(new IOnKeyboardStateChangedListener() {

public void onKeyboardStateChanged(int state) {

switch (state) {

case KeyboardListenRelativeLayout.KEYBOARD_STATE_HIDE://软键盘隐藏

editText.setVisibility(View.VISIBLE);

break;

case KeyboardListenRelativeLayout.KEYBOARD_STATE_SHOW://软键盘显示

editText.setVisibility(View.GONE);

break;

default:

break;

}

}

});

}

}

最后布局文件

android:id="@+id/keyboardRelativeLayout"

android:layout_width="fill_parent"

android:layout_height="fill_parent">

android:layout_height="fill_parent"

android:layout_alignParentLeft="true"

android:layout_alignParentTop="true"

android:fillViewport="true">

android:layout_height="wrap_content"

android:orientation="vertical">

android:layout_width="fill_parent"

android:layout_height="wrap_content"/>

最后就是第三种方法,目前就是用这个种方式代替前面两种:相对简单

首先需要拿到Activity最外面的layout的布局

final View activityRootView = findViewById(R.id.activityRoot);

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

@Override

public void onGlobalLayout() {

int heightDiff = activityRootView.getRootView().getHeight() - activityRootView.getHeight();

if (heightDiff > 100) { // 如果高度差超过100像素,就很有可能是有软键盘...

... do something here

}

}

});

android 键盘 自动消失,android 键盘状态,获取键盘显示和隐藏相关推荐

  1. android 键盘 自动消失,Android 系统键盘怎么也不消失

    版权声明:本文为博主原创文章,未经博主允许不得转载. 在我们开发EditText的时候,会经常和系统输入框打交道,各种系统输入框的显示和隐藏的控制.常常也碰到各种显示不了,隐藏不了的问题.最近碰到一个 ...

  2. android notification自动消失,Android开发 -- 状态栏通知Notification、NotificationManager详解...

    本想自己写一个的,但是看到这篇之后,我想还是转过来吧,实在是非常的详细: 在Android系统中,发一个状态栏通知还是很方便的.下面我们就来看一下,怎么发送状态栏通知,状态栏通知又有哪些参数可以设置? ...

  3. android 键盘 自动消失,android 软键盘 回到键 消失事件 监听

    弹出输入法 时 隐藏了 '底部状态栏' 在按 物理 返回键 后, 软键盘消失后 恢复 '底部状态栏' public class ImageViewCareIME extends ImageView { ...

  4. android 键盘 自动消失,Android EditText点击弹出软键盘点击外部消失

    在Activity中: @Override public boolean dispatchTouchEvent(MotionEvent ev) { switch (ev.getAction()) { ...

  5. android弹窗自动消失,Android点击popupwindow以外区域 popupwindow自动消失(转载)

    方法一(这种方法可以处理popupwindows dimiss的时候一些其他的操作,比如让其他控件的隐藏,消失等): 代码如下popupWindow.setFocusable(false);//foc ...

  6. 实现状态面板的显示与隐藏

    实现状态面板的显示与隐藏 下午练习了一下状态面板的显示与隐藏,参考的代码是把 container 做为一个控件,放到 view 中,然后 在 AknViewAppUi 中创建 view ,基中在资源文 ...

  7. android edittext自动获取焦点,Android取消EditText自动获取默认焦点

    Android取消EditText自动获取默认焦点 发布时间:2020-10-02 14:08:30 来源:脚本之家 阅读:142 作者:ganchuanpu 最近在通讯录新建联系人=中,一进入一个页 ...

  8. android通知 自动消失了,为什么通知会在android通知栏中显示一段时间然后消失

    我正在使用BroadCastReceiver,接收BOOT_COMPLETED动作.收到此广播后,AlarmManager将被设置,并且此AlarmManager会触发通知: 广播接收者代码: pac ...

  9. android开发自动拍照,Android:Camera2开发详解(上):实现预览、拍照、保存照片等功能...

    android.jpg 前言 在前几篇文章中介绍了如何调用系统相机拍照和使用Camera1的实现自定义相机拍照.人脸检测等功能 文章传送门: 接下来的几篇文章中,我将给大家介绍如何使用Camera2实 ...

最新文章

  1. Verilog随机数生成$random
  2. 新老网站长时间无收录多半是站内出了问题
  3. layUI框架中文件上传前后端交互及遇到的相关问题
  4. 万变不离其宗之海量数据下的算法问题处理思路
  5. kotlin 查找id_Kotlin程序查找Square区域
  6. 正则表达式收集(持久更新)
  7. Visa 2021年Q1财报会议:计划与钱包和交易所合作,使用户能购买加密资产
  8. 解决AJAX中使用UpdatePanel后再用Response.Write();等无法弹出对话框问题 3法
  9. 进销存excel_excel进销存仓库表格同步手机操作
  10. 火狐浏览器不支持html5,这样写 火狐浏览器不支持?
  11. houdini 体积
  12. 双线性插值实现图像放大算法 matlab,FPGA/verilog实现双线性插值图像放大
  13. java的视频案例教学 值得下载
  14. python 读bin文件_Python学习 | Python 读写文件-bin文件打开
  15. Okhttp上传图片
  16. 使用Huginn批量订阅微信公众号
  17. 阿里巴巴编码规范解读(五)-MySQL数据库
  18. cvCvtColor 颜色空间转换函数
  19. 数据的存储(浮点型篇)
  20. 超星系统登录,信息爬取

热门文章

  1. linux日志服务器审计客户端history记录
  2. python抓取微信文件_python 如何爬取微信公众号里的图片?
  3. 问题 B: 道路建设 (Ver. I)
  4. mysqldump命令备份数据 mysql备份数据
  5. python 廖雪峰_实战 - 廖雪峰的官方网站
  6. 在react里实现点击回车键执行事件
  7. 13.1 数状数组 ——【小朋友排队】
  8. mysql学习笔记(1)_DQL(Data Query Language)
  9. sublime使用教程及快捷方式
  10. NOIP复习篇———动态规划