600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > Android手动控制软键盘的开启和关闭 判断软键盘是否显示;

Android手动控制软键盘的开启和关闭 判断软键盘是否显示;

时间:2019-10-23 09:14:40

相关推荐

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 /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可见区域的bottomRect rect = new Rect();//DecorView即为activity的顶级viewactivity.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() {@Overridepublic void run() {InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);imm.showSoftInput(et.getEditText(),InputMethodManager.SHOW_FORCED);}},500);

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。