Android 软键盘的显示和隐藏

文章目录

  • Android 软键盘的显示和隐藏
    • 核心方法
    • 软键盘工具类
    • 点击空白区域隐藏软键盘
      • 方式一
      • 方式二

Android 软键盘的显示和隐藏

核心方法

显示软键盘:

InputMethodManager#showSoftInput(View view, int flags)

隐藏软键盘:

InputMethodManager#hideSoftInputFromWindow(IBinder windowToken, int flags)

flags操作标志:

flags0SHOW_IMPLICITSHOW_FORCED
0YYY
HIDE_IMPLICIT_ONLYNYN
HIDE_NOT_ALWAYSYYN

先弹出软键盘,再隐藏软键盘,Y 表示软键盘隐藏,N 表示软件不能隐藏。

SHOW_IMPLICIT:隐式弹窗键盘,表示弹出键盘不是由用户直接发起的,键盘可能不会弹出。

SHOW_FORCED:强制弹出键盘,表示弹出键盘是用户直接发起的,在用户请求收起键盘前,软键盘会一直显示。

HIDE_IMPLICIT_ONLY:只有通过 SHOW_IMPLICIT 弹出的键盘才能被隐藏。

HIDE_NOT_ALWAYS:表示只要不是通过 SHOW_FORCED 弹出的键盘都会被隐藏。

调用 SHOW_FORCED 可以保证软键盘一定会弹出,调用 0 可以保证软键盘一定会隐藏。

也可以简单粗暴的将两个方法中的 flag 都设为 0。

软键盘工具类

/*** 软键盘工具类*/
public class KeyboardUtils {/*** 显示软键盘** @param editText*/public static void showSoftInput(EditText editText) {if (editText == null)return;InputMethodManager imm = (InputMethodManager) BaseApplication.getInstance().getSystemService(Context.INPUT_METHOD_SERVICE);if (imm == null)return;editText.setFocusable(true);editText.setFocusableInTouchMode(true);editText.requestFocus();imm.showSoftInput(editText, 0);}/*** 隐藏软键盘** @param view*/public static void hideSoftInput(View view) {if (view == null)return;InputMethodManager inputMethodManager = (InputMethodManager) BaseApplication.getInstance().getSystemService(Context.INPUT_METHOD_SERVICE);if (inputMethodManager == null)return;inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0);}/*** 隐藏软键盘** @param editText*/public static void hideSoftInput(EditText editText) {if (editText == null)return;InputMethodManager inputMethodManager = (InputMethodManager) BaseApplication.getInstance().getSystemService(Context.INPUT_METHOD_SERVICE);if (inputMethodManager == null)return;editText.clearFocus();inputMethodManager.hideSoftInputFromWindow(editText.getWindowToken(), 0);}/*** 隐藏软键盘** @param activity*/public static void hideSoftInput(Activity activity) {Window window = activity.getWindow();View view = window.getCurrentFocus();if (view == null) {view = window.getDecorView();}hideSoftInput(view);}/*** 软键盘切换*/public static void toggleSoftInput() {InputMethodManager imm = (InputMethodManager) BaseApplication.getInstance().getSystemService(Context.INPUT_METHOD_SERVICE);if (imm == null)return;imm.toggleSoftInput(0, 0);}}

点击空白区域隐藏软键盘

方式一

public class BaseActivity extends AppCompatActivity {@Overridepublic boolean onTouchEvent(MotionEvent event) {if (getCurrentFocus() != null) {InputMethodManager mInputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);if (mInputMethodManager != null) {return mInputMethodManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);}}return super.onTouchEvent(event);}
}

方式二

public class BaseActivity extends AppCompatActivity {//    @Override
//    public boolean onTouchEvent(MotionEvent event) {
//        if (getCurrentFocus() != null) {
//            InputMethodManager mInputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
//            if (mInputMethodManager != null) {
//                return mInputMethodManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
//            }
//        }
//        return super.onTouchEvent(event);
//    }@Overridepublic boolean dispatchTouchEvent(MotionEvent ev) {if (ev.getAction() == MotionEvent.ACTION_DOWN) {View view = getCurrentFocus();if (isShouldHideKeyboard(view, ev)) {KeyboardUtils.hideSoftInput(view);}}return super.dispatchTouchEvent(ev);}/*** 是否隐藏软键盘*/private boolean isShouldHideKeyboard(View v, MotionEvent event) {if (v != null && v instanceof EditText) {int[] location = {0, 0};v.getLocationInWindow(location);int left = location[0];int top = location[1];int right = left + v.getWidth();int bottom = top + v.getHeight();return !(event.getX() > left && event.getY() < right && event.getY() > top && event.getY() < bottom);}return false;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/589611.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Unity美术】Unity工程师对3D模型需要达到的了解【二】

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;Uni…

python使用句柄控制windows窗口

方法一&#xff1a;通过类名和标题搜索窗体并返回句柄&#xff0c;以整个windows窗口开始查找 hwnd win32gui.FindWindow(lpClassNameNone, lpWindowNameNone) hwnd win32gui.FindWindow(None,命令提示符) 方法二&#xff1a;从给定的子窗口之后开始&#xff0c;比如给定…

一元函数微分学——刷题(8

目录 1.题目&#xff1a;2.解题思路和步骤&#xff1a;3.总结&#xff1a;小结&#xff1a; 1.题目&#xff1a; 2.解题思路和步骤&#xff1a; 先看A&#xff0c;既然存在&#xff0c;那么f(x)和x属于同阶无穷小&#xff0c;所以f(0)0&#xff0c;没问题 再看C&#xff0c;结…

UntiyShader(七)Debug

目录 前言 一、利用假彩色图像 二、利用Visual Studio 三、帧调试器 前言 Debug&#xff08;调试&#xff09;&#xff0c;是程序员检查问题的一种方法&#xff0c;对于一个Shader调试更是一种噩梦&#xff0c;这也是Shader难写的原因之一——如果效果不对&#xff0c;我们…

Linux用户登出或者终端关闭后继续运行的方法

nohup 是一个 POSIX 命令&#xff0c;它的名称来源于“no hang up”的缩写。这个命令的基本用途是运行一个命令&#xff0c;使得该命令在用户登出或者终端关闭后继续运行。nohup 命令通常与后台运行的命令&#xff08;使用 & 符号&#xff09;结合使用&#xff0c;以便在终…

ubuntu22.04安装anacoda遇到的坑

这几天把用了3年的windows10换成了ubuntu22.04 各种环境都得配置&#xff0c;本文记录下遇到的坑。 1、anacoda在ubuntu上也可以用官方也提供了安装包&#xff0c;但是没有图形界面&#xff0c;需要以命令行的方式安装和运行配置 1.1 安装&#xff1a;官网下载后&#xff0c;…

极速文件搜索工具Everything结合内网穿透实现远程搜索本地文件

文章目录 前言1.软件安装完成后&#xff0c;打开Everything2.登录cpolar官网 设置空白数据隧道3.将空白数据隧道与本地Everything软件结合起来总结 前言 要搭建一个在线资料库&#xff0c;我们需要两个软件的支持&#xff0c;分别是cpolar&#xff08;用于搭建内网穿透数据隧道…

ShuffleNet V2:高效CNN架构设计实用指南

摘要 目前&#xff0c;神经网络架构设计主要以计算复杂度的间接指标&#xff08;即 FLOPs&#xff09;为指导。然而&#xff0c;直接指标&#xff08;如速度&#xff09;还取决于其他因素&#xff0c;如内存访问成本和平台特性。因此&#xff0c;这项工作建议在目标平台上评估…

1 - 数据库服务概述 | 构建MySQL服务 | 数据库基本管理 | MySQL基本类型

数据库服务概述 | 构建MySQL服务 | 数据库基本管理 | MySQL基本类型 数据库服务概述构建mysql服务安装mysql软件包连接mysql服务器 修改密码 密码管理修改密码策略&#xff08;需要登陆&#xff09;破解数据库管理员root密码&#xff08;数据库服务处于运行状态但是root忘记了密…

win/linux 环境查看动态库包含的函数

我们打包了动态库&#xff0c;还要查看是否包含一些函数&#xff0c;需要导出这些函数 在win 环境下可以使用 .def 格式的文件进行操作 ######################################################### 跳过这一步&#xff0c;回到主题&#xff0c;在两个系统平台如何查看动态库包…

时序预测 | Matlab实现SSA-CNN-GRU麻雀算法优化卷积门控循环单元时间序列预测

时序预测 | Matlab实现SSA-CNN-GRU麻雀算法优化卷积门控循环单元时间序列预测 目录 时序预测 | Matlab实现SSA-CNN-GRU麻雀算法优化卷积门控循环单元时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 Matlab实现SSA-CNN-GRU麻雀算法优化卷积门控循环单元时间序…

机器学习---降维与度量学习

1. 度量学习 现有的大部分算法对图像进行特征提取后化为向量的表达形式&#xff0c;其本质是把每一幅用于训练的图像 通过某种映射到欧氏空间的一个点&#xff0c;并利用欧氏空间的良好性质在其中进行学习器的训练。但定义 图像特征之间的欧氏距离未必能很好反映出样本之间的…

Resnet BatchNormalization 迁移学习

时间&#xff1a;2015 网络中的亮点&#xff1a; 超深的网络结构&#xff08;突破1000层&#xff09;提出residual模块使用Batch Normalization加速训练&#xff08;丢弃dropout&#xff09; 层数越深效果越好&#xff1f; 是什么样的原因导致更深的网络导致的训练效果更差呢…

自行车服务PEDALWAYS 网站bootstrap5模板

一、需求分析 自行车服务网站的作用是为骑行爱好者和自行车用户提供便捷的信息、工具和服务&#xff0c;以满足他们的需求。以下是一些常见的自行车服务网站的功能&#xff1a; 自行车租赁&#xff1a;提供自行车租赁服务&#xff0c;用户可以在线预订自行车并选择租赁期限&am…

x-cmd pkg | hyperfine - 命令行基准测试工具

目录 简介首次用户功能特点竞品和相关作品进一步阅读 简介 hyperfine 是一个用于命令行基准测试的开源工具&#xff0c;可以对多次命令运行的时间进行分析&#xff0c;帮助开发人员评估和比较不同命令或脚本的性能。它是用 Rust 语言开发的&#xff0c;可以在 Windows、macOS …

【结合创新!!深度学习➕迁移学习】

1️⃣基于预训练模型的微调&#xff1a; 微调是迁移学习中最常用的策略之一。可以利用在大规模数据集&#xff08;如ImageNet&#xff09;上预训练的深度神经网络&#xff08;例如ResNet或BERT&#xff09;&#xff0c;然后将其微调以适应特定的任务或数据集。这种方法特别适用…

Avalonia学习(十五)-OxyPlot

今天开始继续Avalonia练习。展示一些样例&#xff0c;尤其是第三方库的使用。 本节&#xff1a;OxyPlot 1.引入OxyPlot.Avalonia 2.项目引入 在Main方法里增加OxyPlotModule.EnsureLoaded()方法调用。 public static void Main(string[] args) {OxyPlotModule.EnsureLoade…

C++八股文 002:常函数

在编程领域&#xff0c;常函数是指那些不会修改类的任何成员的函数。 换句话说&#xff0c;常函数只能用于访问类的成员&#xff0c;而不能用于修改它们。 常函数通常使用const关键字进行定义和实现&#xff0c;这样可以确保函数不会对类的成员进行任何修改。这种机制可以帮助…

R语言【base】——sep()是用于设置输出多个值之间的分隔符的函数

R语言自带的sep()函数是用于设置输出多个值之间的分隔符的函数。它可以在将结果打印或写入文件时&#xff0c;控制多个值之间的间隔样式。 通常情况下&#xff0c;在R语言中打印多个值时&#xff0c;默认的分隔符是空格。但使用sep()函数&#xff0c;我们可以将分隔符修改为任…

最新解决msvcr100.dll丢失的方法,多种解决方法详细解析

msvcr100.dll丢失会导致某些程序或游戏无法正常运行&#xff0c;msvcr100.dll是Microsoft Visual C 2010的运行时组件&#xff0c;它包含了许多C标准库的函数实现。这些函数在程序运行时被调用&#xff0c;用于处理各种任务&#xff0c;如字符串操作、数学计算、文件操作等。因…