Android:检测软键盘打开

2024-03-01

当软键盘打开时,我想要一个滚动视图向下滚动到底部。

为此我可以使用: fullScroll(View.FOCUS_DOWN);

但是,在软键盘打开事件触发后如何触发该命令?


这是我的解决方案:

1/ 简单的界面

public interface KeyboardVisibilityListener {
    void onKeyboardVisibilityChanged(boolean keyboardVisible);
}

2/ 实用方法(将其放在您想要的位置,例如在名为的类中KeyboardUtil)

public static void setKeyboardVisibilityListener(Activity activity, KeyboardVisibilityListener keyboardVisibilityListener) {
    View contentView = activity.findViewById(android.R.id.content);
    contentView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
        private int mPreviousHeight;

        @Override
        public void onGlobalLayout() {
            int newHeight = contentView.getHeight();
            if (mPreviousHeight != 0) {
                if (mPreviousHeight > newHeight) {
                    // Height decreased: keyboard was shown
                    keyboardVisibilityListener.onKeyboardVisibilityChanged(true);
                } else if (mPreviousHeight < newHeight) {
                    // Height increased: keyboard was hidden
                    keyboardVisibilityListener.onKeyboardVisibilityChanged(false);
                } else {
                    // No change
                }
            }
            mPreviousHeight = newHeight;
        }
    });
}

3/ 以这种方式从 Activity 中使用(一个好地方是 onCreate):

KeyboardUtil.setKeyboardVisibilityListener(this, mKeyboardVisibilityListener);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android:检测软键盘打开 的相关文章

  • 找不到参数的方法 dependencyResolutionManagement()

    我正在尝试使用老师给我的一个项目 但它显示了一个错误 Settings file Users admin AndroidStudioProjects HTTPNetworking settings gradle line 1 A probl
  • 类型容器“Android 依赖项”引用不存在的库 android-support-v7-appcompat/bin/android-support-v7-appcompat.jar

    我在尝试在我的项目中使用 Action Bar Compat 支持库时遇到了某种错误 我不知道出了什么问题 因为我已按照此链接中的说明进行操作 gt http developer android com tools support libr
  • android中向sqlite中插入大量数据

    目前 我必须一次向我的 Android 中插入超过 100 亿条数据 然而 内存不足的问题会使程序崩溃 sqlite 插入测试非常简单 只需使用 for 循环生成 sql 插入命令并通过 开始 和 提交 进行包装 private Array
  • 在 Android Studio 中,为什么我必须在模拟器中单击“运行应用程序”两次才能启动应用程序?

    在 Android Studio 中 当我按播放按钮在 Android 模拟器上安装并运行应用程序时 大约 5 10 秒后 我在屏幕底部收到一条消息 显示 安装成功 但应用程序实际上并未运行在模拟器上 我必须再次按下播放按钮 这是非常令人沮
  • 在 ViewPager Fragments 中使用 Master/Detail 模板(下载链接)

    工作代码 https github com lukeallison ViewPagerMasterDetail https github com lukeallison ViewPagerMasterDetail Android 主 详细流
  • 卸载后 Web 应用程序不显示“添加到主屏幕”

    这是我第一次创建网络应用程序 我设法解决了这个问题 所以我得到了实际的 chrome 提示 将其添加到主屏幕 然后我从手机上卸载了该网络应用程序 因为我想将其展示给我的同事 但是 屏幕上不再出现提示 问题 这是有意为之的行为还是我的应用程序
  • 谷歌坐标认证

    当我尝试连接到 Google 坐标时 总是出现异常GoogleAuthException 我拥有 Google 地图协调中心许可证 我确实使用我的包应用程序名称和 SHA1 在 google 控制台中创建了我的客户端 ID 我将权限添加到清
  • 如何以编程方式检查 AndroidManifest.xml 中是否声明了服务?

    我正在编写一个库 该库提供了一项服务 其他开发人员可以通过将其包含在他们的项目中来使用该服务 因此 我无法控制 AndroidManifest xml 我在文档中解释了要做什么 但一个常见的问题是人们忽略了将适当的 标记添加到其清单中 或者
  • 在 HTTPResponse Android 中跟踪重定向

    我需要遵循 HTTPost 给我的重定向 当我发出 HTTP post 并尝试读取响应时 我得到重定向页面 html 我怎样才能解决这个问题 代码 public void parseDoc final HttpParams params n
  • 是否有 ADB 命令来检查媒体是否正在播放

    我想使用 ADB 命令检查根植于终端的外部设备中是否正在播放音频 视频 我无法找到任何 ADB 命令 如果有 我尝试过 adb shell dumpsys media player 我想要一个命令来指定视频是否正在运行 您可以使用以下命令查
  • 获取当前 android.intent.category.LAUNCHER 活动的实例

    我创建了一个库项目 并在多个应用程序之间共享 我实现了一个简单的会话过期功能 该功能将在一段时间后将用户踢回到登录屏幕 登录屏幕活动是我的主要活动 因此在清单中它看起来像这样
  • 在 android DatePickerDialog 中将语言设置为法语

    有什么办法可以让日期显示在DatePickerDialog用法语 我已经搜索过这个但没有找到结果 这是我的代码 Calendar c Calendar getInstance picker new DatePickerDialog Paym
  • Android访问远程SQL数据库

    我可以直接从 Android 程序访问远程 SQL 数据库 在网络服务器上 吗 即简单地打开包含所有必需参数的连接 然后执行 SQL 查询 这是一个私人程序 不对公众开放 仅在指定的手机上可用 因此我不担心第三方获得数据库访问权限 如果是这
  • Android 中麦克风的后台访问

    是否可以通过 Android 手机上的后台应用程序 服务 持续监控麦克风 我想做的一些想法 不断聆听背景中的声音信号 收到 有趣的 音频信号后 执行一些网络操作 如果前台应用程序需要的话 后台应用程序必须能够智能地放弃对麦克风的访问 除非可
  • 在activity_main.xml中注释

    我是安卓新手 据我所知 XML 中的注释与 HTML 中的注释相同 使用 形式 我想在 Android 项目的 Activity main xml 配置文件中写一些注释 但它给了我错误 值得注意的是 我使用的是 Eclipse 但目前 我直
  • 实现滚动选择 ListView 中的项目

    我想使用 ListView 您可以在其中滚动列表来选择一个项目 它应该像一个 Seekbar 但拇指应该是固定的 并且您必须使用该栏来调整它 我面临的一个问题是 我不知道这种小部件是如何调用的 这使得我很难搜索 所以我制作了下面这张图片 以
  • 捕获的图像分辨率太大

    我在做什么 我允许用户捕获图像 将其存储到 SD 卡中并上传到服务器 但捕获图像的分辨率为宽度 4608 像素和高度 2592 像素 现在我想要什么 如何在不影响质量的情况下获得小分辨率图像 例如我可以获取或设置捕获的图像分辨率为原始图像分
  • 如何将 google+ 登录集成到我的 Android 应用程序中?

    大家好 实际上我需要通过我的应用程序从 google 登录人们 现在我阅读了 google 上的文档 其中指出 要允许用户登录 请将 Google Sign In 集成到您的应用中 初始化 GoogleApiClient 对象时 请求 PL
  • Crashlytics 出现 Android Studio 构建错误

    我正在尝试将 CrashLytics 与 Android Studio 和 gradle 一起使用 但出现一个令人困惑的错误 java lang NoSuchMethodError 我的 build gradle 是 buildscript
  • 节拍匹配算法

    我最近开始尝试创建一个移动应用程序 iOS Android 它将自动击败比赛 http en wikipedia org wiki Beatmatching http en wikipedia org wiki Beatmatching 两

随机推荐

  • R:如何从日期中删除当天? [复制]

    这个问题在这里已经有答案了 我在 df 列中有一堆日期 格式如下 dd mm yyyy 我希望它看起来像这样 01 2020 mm yyyy 如何从所有日期中删除这一天 Use format指定您想要的日期格式 date lt as Dat
  • 从多个 JavaScript 线程访问 IndexedDB

    概述 我试图避免从网页和网络工作人员访问 IndexedDB 时出现竞争情况 Setup 当用户使用站点时将项目保存到本地 IndexedDB 的网页 每当用户将数据保存到本地数据库时 记录就会被标记为 未发送 Web worker 后台线
  • 每当在树视图中添加新节点时创建事件处理程序

    我想编写一个自定义类 每当我向树视图添加一个节点时 它都应该调用一个事件 这样我就可以递归地运行它 我很少使用TreeView 但乍一看这是我的第一印象 由于无法继承 TreeViewCollection 因此您可能必须在新类上创建一个单独
  • 如何获得像Instagram一样1:1比例的Android Camera2?

    我的问题很简单 如何获得安卓系统android hardware Camera2像 Instagram 一样 1 1 比例且不变形 我用 GoogeSamples 项目进行了测试android Camera2Basic https gith
  • Mac OS X 虚拟环境中的 Python 安装是否包含一个可以包含到 Xcode 中的框架?

    我喜欢将 Python 与 numpy scipy 和其他一些包一起使用 我是一个绝对的 Python 初学者 在 Mac OS X 下安装时遇到一些问题 我按照这两个教程来安装 python 1 http hackercodex com
  • 使用 jQuery AJAX 调用类方法?

    我正在从 PHP AJAX 库 xajax 迁移到 jQuery AJAX 使用 xajax 我可以通过将公共类方法绑定到 javascript 函数名称 例如 this gt registerFunction javascriptFunc
  • wpf 网格最佳实践

    我有一个包含许多标签 组合框和文本框的网格 我在每个单元格中都放置了标签和组合框 最佳实践是什么 1 将组合框和标签放入堆栈面板中 然后将其放入单元格中 2 只需将两个控件直接放入网格单元格中 两种方法的优点和缺点是什么 谢谢 将两个控件放
  • 在 Java 中,写入文件比迭代数组慢多少? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我意识到一般来说写入速度较慢 但我想知道是多少 我在服务器类中有一些代码写入日志文件 if inputLine equals y Syste
  • C# 如何检查 if 语句的哪一部分是正确的 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想知道如何检查 if 语句的哪一部分是正确的 例如 如果你有这个 int a 1 b c d if a gt 0 b gt 1 c
  • 使用所见即所得编辑器编辑 HTML

    我有一个带有 HTML 字符串的 datagridview 使用 CellDoubleClick 事件 我在 WebBrowser 控件中显示 html 字符串 In Form1 private void dataGridView1 Cel
  • 订阅 FormBuilder valueChanges 时,使用 debounceTime 和 uniqueUntilChanged 不起作用

    非常简单地说 我想在用户停止输入一段时间后执行查询 我见过的每个教程都使用FormBuilder建议订阅valueChanges输入字段的 同时管道debounceTime and distinctUntilChanged this thr
  • 与语言无关的构建管理系统

    在我的职业生涯中 我曾多次在一个软件团队工作 该团队确定a 我们需要一个构建 测试系统b 我们应该自己写c 我们可以让开发人员花一周的时间来完成它 然后他们就不必再碰它了 每一次 这都会导致一个系统似乎只对编写它的人有效 并且需要他们持续关
  • Rails 3.1 上的 Capistrano 部署/资产失败

    我添加了这一行load deploy assets 到我的 Capfile 以使用 Rails 3 1 部署资产 卡皮斯特拉诺到达这条线 executing cd home deploy armonia stage releases 201
  • pitest无法找到junit测试

    我的 gradlepitest 无法给我正确的结果 看起来它无法找到我的测试文件 我有以下 build gradle 文件 apply plugin java apply plugin maven apply plugin info sol
  • 将 lambda 函数作为参数传递 C++

    我正在努力将 lambda 函数 R1 和 R2 传递给我的模板函数 F 但是 我不确定我是否正确执行此操作 函数 F 应该使用主函数中的所有参数并执行相关计算 牛顿近似根法 我是使用模板函数的新手 因此 任何帮助将不胜感激 main cp
  • C++ 的手册页在哪里? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 Linux 中是否存在 C 文档 我想要类似 C 的手册页之类的东西 例如 string stl ios
  • 我可以在 Kafka Broker 所在的同一台机器上运行 Kafka Streams 应用程序吗?

    我有一个 Kafka Streams 应用程序 它从几个主题获取数据并连接数据并将其放入另一个主题中 卡夫卡配置 5 kafka brokers Kafka Topics 15 partitions and 3 replication fa
  • 单击 jPanel (Java) 时如何调用函数?

    我正在使用 Java 中的 Netbeans IDE 我有一个带有一个 JPanel 的表单 每个 JPanel 都有一个 3x3 的 gridLayout 每个地方都有一个代表数字 0 1 2 3 4 5 6 7 8 的图像 该图像是使用
  • 角度材料日期选择器未在模式对话框中打开

    我有一个以引导模式形式实现的 Angular Material 2 日期选择器 div class modal dialog modal lg div class modal content div class modal header h
  • Android:检测软键盘打开

    当软键盘打开时 我想要一个滚动视图向下滚动到底部 为此我可以使用 fullScroll View FOCUS DOWN 但是 在软键盘打开事件触发后如何触发该命令 这是我的解决方案 1 简单的界面 public interface Keyb