屏幕顶部的自定义 Toast

2024-04-05

请先阅读问题,然后再使用打印 Toast 的标准例程进行回答:)

我想在屏幕的左上角显示一个自定义 Toast。我使用以下代码来创建 Toast:

    Toast mFixedToast = new Toast(getApplicationContext());
    mFixedToast.setDuration(timeout);
    mFixedToast.setView(myInflatedLayout);
    mFixedToast.setGravity(Gravity.TOP|Gravity.FILL_HORIZONTAL, 0, 0);
    mFixedToast.setMargins(0,0);

然而,在某些设备中,例如三星 Galaxy S4,toast 的位置不是 (0,0),而是有 40-50 个像素的边距。许多其他设备按预期工作。

我确信边距是由 WindowManager 添加的(toast 视图作为 TYPE_TOAST 类型的视图添加到 WindowManager)

这是为什么?可以修改吗?请参阅下面的代码,我已将 Toast.java 克隆到我自己的类中,并隔离了将视图添加到 WM 的行:

 // LayoutParams for the TOAST view ... tried to change params.type but no luck.
 final WindowManager.LayoutParams params = mParams;
 params.height = WindowManager.LayoutParams.WRAP_CONTENT;
 params.width = WindowManager.LayoutParams.WRAP_CONTENT;
 params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
              | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
              | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
            params.format = PixelFormat.TRANSLUCENT;
 params.windowAnimations = android.R.style.Animation_Toast;
 params.type = WindowManager.LayoutParams.TYPE_TOAST;

 mWM = (WindowManager)mView.getContext().getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
 mParams.gravity = gravity;

 // CHECKED these all are 0 !!!
 mParams.x = mX; mParams.y = mY;
 mParams.verticalMargin = mVerticalMargin;
 mParams.horizontalMargin = mHorizontalMargin;
 .
 .
 if (localLOGV) Log.v(TAG, "ADD! " + mView + " in " + this+" with "+mX+","+mY+","+mVerticalMargin+","+mHorizontalMargin);
 mWM.addView(mView, mParams);

所以看起来是 WindowManager 在这些设备上添加了这个边距。看起来像是一个安全区域或类似的东西,但我找不到在哪里(或是否)可以更改它。

帮助表示赞赏。


我想通了。

从 4.4+ 开始,您必须添加以下标志:

if (Build.VERSION.SDK_INT > Build.VERSION_CODES.JELLY_BEAN_MR2) {
        mParams.flags = mParams.flags | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;
}

这将使您的吐司一直定位到顶部。

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

屏幕顶部的自定义 Toast 的相关文章

随机推荐

  • 为什么我无法获得这个 numpy 数组的形状?

    我正在使用导入 matlab 文件scipy io 并试图找到它的尺寸 看起来 即使文件被加载到 python 中 它也无法给出尺寸 这是为什么 以及如何解决这个问题 gt gt gt import scipy io gt gt gt pr
  • URL 的数据类型

    我读到 URL 的最大长度可以是 2 000 个字符 因此 我有一个带有 varchar 2000 列类型的表来存储 URL 但此列不能只索引前 1000 个字符 如下所示 URL 的推荐数据类型是什么 mysql gt create ta
  • 如果任何命令失败,则与 exit 并行运行命令将失败

    需要 bash 脚本方面的帮助 目标是 并行运行多个命令 如果任何命令返回非零退出状态 则退出 1 I e 使用中间命令运行有错误 parallel commands echo 1 echo 2 echo 3 echo OK 1 3 par
  • Eclipse:不允许我使用 Android SDK,错误地声称我的 ADT 已过时

    我正在使用 Eclipse 进行 Android 开发 直到昨天一切都运行良好 我使用 Ninite 更新了我的所有内容 包括 JRE 和所有内容 专业提示 不要这样做 并且它在编辑工作区的过程中无需询问就重新启动了我的计算机 这导致了各种
  • elisp:有没有办法获取当前 .el 模块的名称(如 C 中的 __FILE__ )?

    在我的 elisp 模块的顶部 我想做一些简单的事情 message concat Loading expand file name current elisp module 您可以使用变量load file name https www
  • 使用 SelectQuery 对象构建嵌套条件

    我可以使用构建嵌套条件吗SelectQuery object 我想得到 select from car where car color blue or car model Genesis or car manufactor ford and
  • Spring Boot 单元测试中的@SpringBootTest、@ContextConfiguration、@Import

    我正在开发一个 Spring Boot 项目 我正在写一个Unit Test代码基于TDD这有点困难 SpringBootTest加载所有 bean 这导致测试时间更长 所以我用了 SpringBootTest的班级名称 我正常完成了测试
  • Android 前台服务在 MI 4 设备(版本 5.0.2)上被终止

    我知道这个问题被问了很多次 但我没有找到任何解决方案来保持服务 即使我的应用程序被杀死 我的应用程序在所有设备上运行 但是一些设备如果我杀死该应用程序 那么我的服务也会被杀死 设备名称 MI 4 版本和 asus 5 0 3 以下是我启动前
  • Java:返回类(不是实例)

    是否可以在静态方法中返回一个类 我会解释 I have public class A public static void blah public class B 我想在 B 中创建一个静态方法返回A 所以你可以这样做 A blah And
  • 在 Parenscript 中使用 regex(正则表达式)

    我正在尝试 Parenscript 在尝试使用正则表达式函数时 我得到了意外的输出 例如 参考手册 https common lisp net project parenscript reference html shows regex f
  • C#4 动态关键字 - 为什么不呢?

    看了很多回复后这个线程 https stackoverflow com questions 244302 what do you think of the new c 40 dynamic keyword 我看到许多不喜欢它的人都提到了滥用
  • 嵌入式 C++ (ARM9) 单元测试

    我来自 Java 和 JUnit 的世界 我演示了 Hudson 以及我使用 JUnit 取得的所有成果 我想在嵌入式设备上对 C 代码执行相同的操作 但找不到从哪里开始 该项目使用 iccarm exe IAR 编译器 进行编译 现在使用
  • Spring AOP 日志拦截器和 JAXB 问题

    我正在尝试将日志记录方面实现到我的应用程序中 这是我第一次尝试 AOP 所以如果我遗漏了一些明显的东西 请告诉我 为了实现编织外部 jar 我正在尝试实现加载时间编织器 我确实在应用程序上下文中指定了加载时编织器 并在 context xm
  • PHP Mysqli 语句返回单行,-1 行受影响,并且没有错误

    这太令人困惑了 我一定错过了一些简单的东西 我有一个查询 检查我插入的事务是否已经存在 以防止重复 这是代码 function isaDupe portableDB transactArray ref transactArray refer
  • 如何使用 UISwipeGestureRecognizer 将“点击”传递给 UIView 下方的 UIButton?

    我在 透明 UIView 下方有一个 UIButton 上面的 UIView 添加了一个 UISwipeGestureRecognizer 这是它的唯一目的 检测某些滑动手势 我希望该 UIView 忽略所有其他触摸 并传递给其他视图 例如
  • 当文本字段开始编辑 iPhone 时表视图滚动

    我在 iPhone 应用程序中有表视图控制器 表视图有两个部分 第一部分有两行 第二部分有一行 第二部分有一个自定义表格视图单元格 第二部分有一个文本字段 当文本字段开始编辑并且键盘弹出时 该文本字段会隐藏 我希望这个表格视图在键盘弹出时滚
  • Redis 写入 .ssh/authorized_keys

    当前设置 2 个主服务器 12 个工作服务器 工作人员通过 ssh copy id 连接到主设备 主设备和工作人员正在主设备上的 redis 队列中写入数据 过去一周我遇到的问题是 Redis 正在将数据写入authorized keys
  • 将坐标(地理位置)存储在数组中以计算距离

    我和我的搭档正在为我们的学校论文开发一个练习网络应用程序 我们正在尝试使用地理定位 API 的 watchposition 函数获取跑步者的位置并在锻炼期间跟踪他 跑步者可以在屏幕上查看他当前的距离 这是我们被卡住的点 我们只能计算起点和终
  • 在 Kafka 生产者上启用幂等性是否会降低吞吐量

    我有卡夫卡制作人启用幂等性 没有启用一次语义或事务 在休息端点调用中 我启用它的原因是因为我不希望卡夫卡重试导致任何重复 我担心以下几点 幂等性会减慢我的端点速度吗 这个端点需要非常快 我读了 kafka api 文档 启用幂等性将使重试无
  • 屏幕顶部的自定义 Toast

    请先阅读问题 然后再使用打印 Toast 的标准例程进行回答 我想在屏幕的左上角显示一个自定义 Toast 我使用以下代码来创建 Toast Toast mFixedToast new Toast getApplicationContext