Android手动控制软键盘的开启和关闭,判断软键盘是否显示;
工具类,拿走就能用:
import android.annotation.TargetApi;
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 + 虚拟导航栏高度)
//选取screenHeight*2/3进行判断
return screenHeight*2/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;关闭软键盘也是一样;
Android手动控制软键盘的开启和关闭,判断软键盘是否显示;的更多相关文章
- Android 开启与关闭软键盘
http://www.cnblogs.com/weixing/p/3300908.html InputMethodManager imm = (InputMethodManager)getSystem ...
- Android中如何监听GPS开启和关闭
转自 chenming 原文 Android中如何监听GPS开启和关闭 摘要: 本文简单总结了如何监听GPS开关的小技巧 有时需要监听GPS的开关(这种需求并不多见).实现的思路是监听代表 GPS ...
- 实现开启和关闭android移动网络(转)
开启和关闭移动数据网络有两种方法:一种是通过操作系统的数据库改变APN(网络接入点),从而实现开启和关闭移动数据网络,另一种是通过反射调用系统(ConnectivityManager)的setMobl ...
- Android的WiFi开启与关闭
注意:要首先注册开启和关闭WiFi的权限, <?xml version="1.0" encoding="utf-8"?> <manifest ...
- 利用 bat 批量处理命令实现手动控制mysql /Oracle 服务的开启和关闭
利用 bat 批量处理命令实现手动控制mysql /Oracle 服务的开启和关闭 因为最近在学习数据库的知识,主要学习的是oracle 数据库,然而好巧啊,java也是在学习,我们老师现在要我们做一 ...
- Android网络开启、关闭整理
package com.my.device_admin.business; import java.lang.reflect.Method; import android.content.Contex ...
- [Android Traffic] Android网络开启、关闭整理
转载: http://blog.csdn.net/tu_bingbing/article/details/8469871 近段时间由于要对手机网络状况进行判断.开启和关闭,从网上找了些资料,现整理如下 ...
- Android开发之控制Toast的开启与关闭
开发这个程序之前先解释一下,为什么Toast信息提示框在显示一定时间后会自己主动消失?由于在Android系统中有一个Toast队列,系统会依次从这个队列中取出一个Toast,并显示它.在显示了指定时 ...
- Android 怎样开启与关闭adb 的认证机制(google adb secure) (adb RSA 指纹认证)
前言 欢迎大家我分享和推荐好用的代码段~~声明 欢迎转载,但请保留文章原始出处: CSDN:http://www.csdn.net ...
随机推荐
- LambdaAOP
项目地址 : https://github.com/kelin-xycs/LambdaAOP LambdaAOP 一个 用 C# 实现的 使用 Lambda 表达式 的 AOP 这是 一个 用 C# ...
- JS 判断IE(转)
一.: 之前,js判断的方式都是利用浏览器的useragent字段.通过判断useragent字段里面是否包含有MSIE字段来判断是否是IE系列浏览器,屡试不爽. 但是在IE11之后,微软把自家的IE ...
- 开源数据采集组件比较: scribe、chukwa、kafka、flume
针对每天TB级的数据采集,一般而言,这些系统需要具有以下特征: 构建应用系统和分析系统的桥梁,并将它们之间的关联解耦: 支持近实时的在线分析系统和类似于Hadoop之类的离线分析系统: 具有高可扩展性 ...
- XE5开发Android程序调用电话相关功能(短信息和电话) [转]
其实都可以通过intent和URI调用系统功能.Windows程序员可以理解成是ShellExecute.这个是万金油.可以有调用各种功能.后面会介绍. 1.短信息.很简单 方法a.不使用Intent ...
- 黄聪:在.NET中使用GeckoFX 29
GeckoFX is a .NET control, that works similarly to “System.Windows.Forms.WebBrowser” Control, while ...
- Linux ssh服务器配置
配置文件在/etc/sshd_config,注意只有root可rw,其他所有用户权限为---. 配置说明可参考man sshd_config. 如果更改了服务器端口号,并且启用了SELinux,需要执 ...
- mongoDB oplog的说明及应用
mongoDB oplog 说明 ts:8字节的时间戳,由4字节unix timestamp + 4字节自增计数表示.这个值很重要,在选举(如master宕机时)新primary时,会选择ts最大的那 ...
- 【JVM】Class结构之常量池
常量池 主要包括下面2类: 字面量(Literal):如int,double,String等: 符号引用(Symbolic Reference): 符号引用 类和接口的全限定名: 字段的名称和描述符: ...
- TweenMax 参考
http://bbs.9ria.com/thread-214959-1-1.html TweenMax 可能是很多人都用的,包括我 但 是最近发现大量的运用就总会产生这样或那样的"怪事&qu ...
- 服务容错保护断路器Hystrix之三:断路器监控(Hystrix Dashboard)-单体监控
turbine:英 [ˈtɜ:baɪn] 美 [ˈtɜ:rbaɪn] n.汽轮机;涡轮机;透平机 一.Hystrix Dashboard简介 在微服务架构中为了保证程序的可用性,防止程序出错导致网络阻 ...