Android 4.2.2+ 上的叠加状态栏

2024-03-04

我想覆盖 android 状态栏。就我而言,它位于顶部。我不想覆盖或隐藏导航栏。

Note:解决方案必须在 Android 4.2.2+ 上运行。我更喜欢非 root 设备的答案。

我搜索了很多 SO 问题和答案,但没有一个适用于 4.2.2。

下面是我的代码,但它不消耗触摸事件。这就是状态栏打开其面板的原因。我不想要这个。

@Override 
public void onCreate() {
    super.onCreate();

    windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);

    int statusBarHeight = (int) Math.ceil(25 * getResources().getDisplayMetrics().density);

    overlay = new Button(this);
    overlay.setBackgroundColor(Color.GREEN);
    overlay.setOnTouchListener(new OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            Log.i("StatusBar", "touched");
            return false;
        }
    });

    WindowManager.LayoutParams params = new WindowManager.LayoutParams(
            WindowManager.LayoutParams.FILL_PARENT,
            statusBarHeight,
            WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
            WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE|
            WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL|
            WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH|
            WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN,
            PixelFormat.TRANSLUCENT);

    params.gravity = Gravity.TOP | Gravity.RIGHT;

    windowManager.addView(overlay, params);

}

@Override
public void onDestroy() {
    super.onDestroy();
    if (overlay != null) windowManager.removeView(overlay);
}

在主要活动中我开始服务:

startService(new Intent(this, StatusBarService.class));

并在AndroidManifest.xml中添加权限:

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>

现在证明它可以完成并且可以在 4.2.2 上运行:玩 Google - MobiLock https://play.google.com/store/apps/details?id=com.promobitech.mobilock

How?

Screenshots: enter image description here enter image description here


尝试并重复之后,这对我来说是这样的:

int statusBarHeight = (int) Math.ceil(25 * getResources().getDisplayMetrics().density);

WindowManager.LayoutParams params = new WindowManager.LayoutParams(WindowManager.LayoutParams.FILL_PARENT,
            statusBarHeight,
            WindowManager.LayoutParams.TYPE_SYSTEM_ERROR,
            WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE|
            WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL|
            WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN,
            PixelFormat.TRANSLUCENT);

它适用于 4.2.2 和 4.4.2

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

Android 4.2.2+ 上的叠加状态栏 的相关文章

  • 谷歌地图不显示 Android

    我想在我的应用程序中实现谷歌地图 我添加了谷歌地图活动并创建了一个密钥 我没有更改其他地方的代码中的任何内容 我应该工作 但没有 地图活动 public class MapsActivity extends FragmentActivity
  • 使用应用程序上下文滑动图像加载

    我在我的 Android 应用程序中使用 glide 进行图像加载 为了避免任何崩溃 我正在使用应用程序上下文加载图像 这对应用程序和内存的性能有何影响 这对应用程序和内存的性能有何影响 Glide提供了这么多 with 方法是有原因的 它
  • 调用了 BroadcastReceiver 但未调用 PhoneStateListener

    在调试下面的代码时 BroadcastReceiverCustom 正在被 已调用 但 PhoneStateListenerCustom 未调用 现在我只在 BroadcastReceiverCustom 中执行所需的操作 但可能不是最好的
  • 将分页库从 3.0.0-alpha10 更新到 3.0.0-alpha12 时出现运行时错误

    我使用 paging 3 0 0 alpha10 创建了我的 pagingSource 类并且它有效 但是当我将版本更改为 3 0 0 alpha12 时 我收到这个错误 这是运行时异常 java lang AbstractMethodEr
  • android中viewpager中的多个视频播放器

    我想在 viewpager 中的不同片段上播放视频 我为每个片段使用多个媒体播放器和表面视图 当我向左或向右滑动时 我也想暂停和开始视频 滑动到下一个视频完全没有问题 但是当我滑动到上一个视频 已经在播放 时 表面视图重叠 同时 我可以毫无
  • Unity 2018.3 android dex合并问题

    在您决定将这篇文章视为 重复 而不阅读它之前 请了解我已经查看了大量与此主题相关的帖子 但我找不到适合我的实例的解决方案 包括 StackOverflow 建议的所有解决方案 大多数帖子都是针对 Android Studio 而不是 Uni
  • 创建带有蒙版的 ImageView

    我关注了有关该主题的其他一些问题 以及 XferModes 上的 API 演示 并尝试创建一个根据 alpha 掩码屏蔽其内容的 ImageView Alpha 位图包含 0 alpha 表示要隐藏的区域 255 alpha 表示要显示的区
  • 我的应用程序重新启动后房间数据丢失

    我的应用程序中有一个 Room 的简单实现 它有两个实体 应用程序运行时它工作正常 但应用程序重新启动后我看不到任何数据 这是我的数据库创建代码 Database entities Person class College class ve
  • ZipResourceFile 无法解析为类型

    我正在尝试重写我的应用程序以使用 APK 扩展文件 我一直在关注这里的文档http developer android com google play expansion files html http developer android
  • Firebase 实时数据库 .info/connected 本应为 True 时为 False

    我有一个 Android 服务 它的调用地址为onCreate FirebaseDatabase database FirebaseDatabase getInstance database getReference info connec
  • 使用 JWT 创建 Firebase 自定义身份验证令牌

    为了创建 firebase 自定义身份验证令牌 我使用第三方 JWT 库 https github com jwtk jjwt https github com jwtk jjwt 在此库中 有一个选项可以添加 firebase 自定义令牌
  • 如何使用远程 URL 在 Android 模拟器中播放 mp4 视频?

    如何使用远程 URL 在 Android 模拟器中播放 mp4 视频 我使用了以下代码 但此代码给我错误 抱歉 该视频无法播放 07 05 16 58 19 525 INFO AwesomePlayer 34 mConnectingData
  • Android 上的 React Native:无法运行程序“node”:错误=2,没有这样的文件或目录

    编辑 我不确定我采取了哪些步骤来解决此问题 并且不再看到此错误消息 因此我无法测试下面的解决方案 请单独尝试 因为不同的答案似乎适用于不同的人 iOS 版本工作正常 但在我的 Mac 上运行 Android Studio 时出现以下 Gra
  • 如何以编程方式检测 Android 设备是否与 USB OTG 连接

    我正在使用定制 OTG 指纹扫描仪 我想检查 OTG 是否已连接到我的 Android 设备或未在特定的 Android 活动中 public class BootUpReceiver extends BroadcastReceiver p
  • 如何将两个 APK 合并为一个,以便两个应用程序可以同时安装

    如何将 2 个 Android 应用程序合并到捆绑包中 以便在安装捆绑包时同时安装两个应用程序 我想将 2 个 APK 合并到一个捆绑包中 以便我可以将其上传到 Android Market 当有人将其安装到设备上时 这两个应用程序都应该安
  • 启动 Activity 时自动弹出键盘

    我有一个相对简单的问题 我有一个包含很多 EditText 的活动 当我打开活动时 它会自动聚焦到第一个 EditText 并显示虚拟键盘 我怎样才能防止这种情况发生 在 XML 文件的布局标签中使用此属性 android focusabl
  • java.io.IOException:Android Firebase 中的 FIS_AUTH_ERROR 但调试模式正常

    我在检索 firebase 令牌时遇到以下问题 FirebaseMessaging getInstance getToken 在调试模式下 我获取令牌并将其发送到服务器 在运行模式下 应用程序工作正常 它已发布 但我无法获取令牌 因为我已经
  • Android:如何实现“分布式控制”

    对于与 Android 开发者论坛的交叉发帖表示歉意 那里没有收到任何答复 我有一个有趣的设计挑战 我有一个前端 Activity 和一个后端 用本机 C C 编写 代码 后端是一个复杂的对象 它部分控制 应用程序流程一旦启动就在它自己的线
  • Android Studio 3.0 中的 Gradle 构建错误

    您能帮我解决 Android 3 0 中的 Gradle 构建问题吗 我是 Android Studio 的新手 以下是我在 AS 3 0 中的配置 gradle gt wrapper gt gradle wrapper propertie
  • 使用 OnContextItemSelected 从 ListView 项目中检索文本

    我有一个带有 经典 上下文菜单的 ListView 其中包含删除和类似选项 由于我要从 SharedPreferences 对象中删除 因此我需要检索键 即设置到 ListView 项目中的文本 我尝试过以下代码 Override publ

随机推荐