Android 悬浮窗口 的朝向 以及 无activity 屏幕旋转的 问题解析

Android 全屏悬浮窗适配(悬浮窗沉浸式) 前言 由于Android 高版本的类型限制,如果我们使用WindowsManager 做悬浮窗,会被限制在当前窗口内容中。而当前窗口大小会限制在状态栏和导航栏之间,所以会导致悬浮窗沉浸不了状态栏。 高版本windowsmanager 限制 源码 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {//6.0+ mParams.type = WindowManager.LayoutParams.TYPE_. 阅读详情

前言

android 悬浮球 (所有界面可用) 开发 在测试的时候,会遇到屏幕旋转,导致布局失效错乱

解决方案

1 直接指定 landscape 或者portrait

.....
mFBParams = new LayoutParams(); //设置悬浮球布局的参数
mFBParams.x = mScreenWidth-mFloatBallView.getWidth(); 
mFBParams.y = mScreenHeight / 2;
mFBParams.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
//或者SCREEN_ORIENTATION_PORTRAIT 
mFBParams.width = WindowManager.LayoutParams.WRAP_CONTENT;
mFBParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
mFBParams.gravity = Gravity.LEFT | Gravity.TOP;
mFBParams.type = LayoutParams.TYPE_SYSTEM_ALERT | LayoutParams.TYPE_SYSTEM_OVERLAY;//顶层的View ,就要用这两个type 
mFBParams.format = PixelFormat.TRANSLUCENT;//半透明
mFBParams.flags = LayoutParams.FLAG_NOT_TOUCH_MODAL | LayoutParams.FLAG_NOT_FOCUSABLE;//设置没有焦点不能touch,这样其他的界面才可以滑动和操作
mWindowManager.addView(mFBWindow, mFBParams);

2.根据 收到的横竖屏切换 广播信息

这里的广播有两个需要接收
Intent.ACTION_CONFIGURATION_CHANGED //横屏 竖屏 切换 发送广播,但是有时候不灵
Intent.ACTION_CLOSE_SYSTEM_DIALOGS //按home 按键的时候,发送的广播

同时注意 这个BroadcastReceiver 是只能动态注册

private void registerConfigChangeReceiver(){
    IntentFilter configChangeFilter = new IntentFilter();
    configChangeFilter.addAction(Intent.ACTION_CONFIGURATION_CHANGED);
    configChangeFilter.addAction(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
    registerReceiver(mConfigChangeReceiver, configChangeFilter);
}

private BroadcastReceiver mConfigChangeReceiver = new BroadcastReceiver(){
    @Override
    public void onReceive(Context context, Intent intent) {
        mFBManager.onSreenOrientationConfigChange();
    }
};

// mFBManager
 @Override
 public void onSreenOrientationConfigChange(){
     Log.d(TAG,"onSreenOrientationConfigChange getRotation = "
             +mWindowManager.getDefaultDisplay().getRotation());

     switch (mWindowManager.getDefaultDisplay().getRotation()){
         case Surface.ROTATION_0:
              //竖屏
              break;
         case Surface.ROTATION_90:
             //顺时针旋转90度
             break;
         case Surface.ROTATION_180:
             //顺时针旋转180度
             break;
         case Surface.ROTATION_270:
            //顺时针旋转270度
             break;
         default:
             break;
     }
}

上面可以使用旋转角度选择不同的布局,切换界面

PS: android 有5个广播接收者 只能通过动态注册

广播名称广播含义
Intent.ACTION_TIME_TICK表示当前时间已经改变了,每分钟发送一次
Intent.ACTION_BATTERY_CHANGED当前手机电量发生改变时发送,可以读取当前充电状态,电池电量等其他相关信息
Intent.ACTION_SCREEN_ON屏幕被点亮时发送
Intent.ACTION_SCREEN_OF屏幕息屏时发送
Intent.ACTION_CONFIGURATION_CHANGED当前系统的Configuration发生改变时,例如屏幕方向,系统语言等发生改变了
“android.intent.action.ANR”出现anr时发送的广播

Android屏幕显示 android:screenOrientation configChanges 处理配置变更 代码中动态切换横竖屏 具体区别如下:activity.getResources().getConfiguration().orientation获取的是当前设备的实际屏幕方向值,可以动态地根据设备的旋转或用户的操作进行改变。例如,当用户将设备从纵向旋转到横向时,获取到的屏幕方向值也会相应地改变。Manifest中配置的orientation是用于指定活动的默认方向,即在没有其他因素影响时,活动应该显示的方向。它可以有以下几个值:portrait:纵向(竖屏)方向。landscape:横向(横屏)方向。 阅读详情

相关推荐

安卓视频播放悬浮全屏竖屏切换技术

可以实现任何地方的视频悬浮播放技术,特别是像item中有视频播放的情况,切换全屏竖屏,视频不会重新加载

android dialog自定义布局旋转,自定义dialog以及使用

注:本文绝大部分参考于:https://www.jianshu.com/p/64446940eccf。这位作者讲的十分详细,有自定义的一部分,以及封装dialog的代码,我按照她的文章实现了自己的需求。但是调用的时候,对我来讲报错了,一直在解决bug,后来是在另一篇优秀的文章上找到解决办法,这个是直接自定义及现成的调用代码,对调用来讲,是非常实用的。链接:点击打开链接强烈建议朋友们结合一起参考学习...

weixin_31620365的博客 551

Android屏幕旋转适配

代码解析 http://blog.youkuaiyun.com/leejizhou/article/details/51233342

Android系统悬浮球开发,在Android12上不显示的问题排查与处理。

Android悬浮窗,横竖屏显示有问题

Ung8023 3749

【小贪】万字长文介绍因果推断和增益模型

本文首先从一个实例出发阐述了因果性不等于相关性,进而引出因果推断和增益模型。然后简单介绍了因果推断的基础内容,并介绍了主要的三类增益模型:元学习、增益直接建模、表示学习,每一类模型都简要介绍了其经典模型。之后介绍了增益模型的评价指标,包括uplift bins、uplift curve和qini曲线。增益模型实际上是一大类模型框架,本质上可以用传统响应模型或其他机器学习模型嵌入增益模型的框架,但是预测结果并不是一个概率,模型评价方式也有变化。训练样本收集增益模型建模强依赖于ab实验,数据要求很高。

打瞌睡_的博客 2505

Allegro模块复用:从原理图到PCB的完整流程与关键细节

本文详细介绍了Allegro模块复用从原理图到PCB的完整流程与关键细节,包括DSN和MDD文件的创建、模块调用的实战技巧以及双向同步与版本控制方法。通过标准化处理和高级复用技巧,能显著提升PCB设计效率,减少重复工作时间。适用于智能硬件和工业控制等领域的工程师。

weixin_30252709的博客 332

Android窗口旋转原理,Android浮动窗口实现原理及代码实例

1.浮动窗口的实现原理看到上图的那个小Android图标了吧,它不会被其他组建遮挡,也可以响应用户的点击和拖动事件,它的显示和消失由WindowManager直接管理,它就是Android浮动窗口。Android浮动窗口的实现主要是靠WindowManager这个类。通过WindowManager类的addView(),updateViewLayout(),removeView()这几个方法,我们...

weixin_42563415的博客 475

2019年电赛D题《简易电路特性测试仪》全过程

2019年全国大学生电子设计大赛D题《简易电路特性测试仪》硬件部分及故障分析

zzhao2580的博客 5万+

android 悬浮窗口禁止横屏显示,悬浮窗强制设置屏幕方向|App开发交流区|研发交流|雨滴科技技术论坛 - Powered by Discuz!...

最近在做平板上的一个程序,需要配合中通的app来控制扫描与分拣机的转动。然后中通的程序在平板上运行有一个问题,就是app里设置了强制竖屏,不能跟随系统旋转应用屏幕方向,然后把系统里的屏幕方向写死,虽然方向旋转过来了,不过又出现了其他问题,点击的坐标异常了,app里的控件点击了没反应或是点这个响应了其他按钮,没有头绪,大家只好作罢后来苏哥说这样给客户看着很吃力,让我试着给加一个悬浮窗口,抓取中通里的...

weixin_30315143的博客 2298

基于资源预测的Agent弹性伸缩:在成本与响应延迟间寻找最佳平衡点

手动伸缩:完全由运维人员人工调整副本数或服务器数量,效率极低,现在基本只用于极小规模的业务。反应式伸缩:基于当前实时监控指标触发伸缩规则,比如CPU利用率超过70%就加2个副本,是目前应用最广泛的方案,典型代表是K8s HPA、KEDA。预测式伸缩:基于历史时序数据预测未来的负载,提前进行伸缩,解决反应式伸缩的滞后性问题,典型代表是AWS Predictive Scaling、阿里云预测式HPA。智能Agent伸缩。

SuperAGI2025 132

NVIDIA Tao Toolkit环境配置踩坑

请搭配食用该文章为 Tao 安装中可能出现的问题进行解答,如果存在本文章中没出现的问题,欢迎提问,由我复现后更新文章。由于大部分云服务器厂商不能支持 docker,因此我使用的环境为2023年5月27日在平台租的 3080 旧版环境进行实验。

qq_36630208的博客 771

Android8.1悬浮窗的配置

之前写过一篇文章有提及悬浮窗的实现:《Android 8.1 App开机自启动、注册为无障碍服务、实现悬浮窗》。 最近需要实现一个覆盖全屏的悬浮窗,目的是为了给屏幕加上一层护眼色。这样的话这种悬浮窗就不能屏蔽对下层软件的操作,比如说你要点击滑动之类的,这些操作就必须能够穿透到下层的软件界面去,相关的悬浮窗设置代码就可以这样设置: layoutParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;//设置为悬...

徘徊的风 853

滴滴数据分析80道面试题及参考答案

常见的模型评价指标有准确率、召回率、F1 值、均方误差、均方根误差、R 方等。准确率是指模型预测正确的样本数占总样本数的比例,它反映了模型预测的准确性。召回率是指模型预测为正例的样本中实际为正例的比例,它衡量了模型对正例的捕捉能力。F1 值是准确率和召回率的调和平均数,综合考虑了两者的平衡。均方误差是预测值与真实值之差的平方的平均值,它衡量了模型预测值与真实值的平均偏离程度。均方根误差是均方误差的平方根,与均方误差类似,但更直观地反映了误差的大小。

大模型大数据攻城狮的专栏 1694

Android 悬浮窗基本使用

很多 iPhone 用户都喜欢打开一项设置,那就是 AssistiveTouch ,我们俗称小白点,它位于整个屏幕之上,就像是漂浮在所有的 App 之上。Android 手机上也有很多应用有这样的东西,比如 360 或者其他主要是手机管家之类的软件。 在之前的公司项目中也有用到这样的悬浮窗,虽然权限有些敏感,但是还算是比较常用,所以在这里记录一下它的基本使用。

禽兽先生不禽兽 1万+

uniapp - [微信小程序] 实现点击预览各种文件 pdf文档、视频mp4、mp3音乐、图片图像、word/excel/ppt 等,uniapp小程序文件预览功能(详细示例代码,一键复制开箱即用)

uniapp,uniapp微信小程序,支付宝小程序平台端,uniapp实现文件在线预览,uniapp微信小程序怎么实现预览视频mp4,mp3音乐,图片,office文档,小程序平台如何在线预览word/excel/ppt文档,uniapp实现小程序端的文件查看功能,uniapp小程序端实现pdf文件预览,uniapp纯前端预览PDF、DOC、DOCX、图片、视频,uni-app文档、图片预览查看,uniapp文档预览功能,uniapp小程序端文件预览,uniapp小程序平台纯前端解析word,pdf,xls

✅ 精选推荐文章 1万+

通过采用下面方法检查内容,还是系统无法更新下载,但是错误代码变成了——下载错误 - 0x80004002-到底如何解决?必须重装系统吗?-这个到底是系统问题,还是硬件问题?

‌。

qq_15963745的博客 335

Android手动切换屏幕方向

屏幕方向参数:         ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED,//未指定,此为默认值。由Android系统自己选择合适的方向。        ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE,//横屏        ActivityInfo.SCREEN_ORIENTATION_PORTRAIT,/

fengqiangfeng的专栏 8904

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Android屏幕方向调整的两种方式(4)

华为云享专家,InfoQ签约作者,阿里云专家博主,51CTO博客首席体验官,,专注于大前端技术的分享,包括Flutter,小程序,安卓,VUE,JavaScript。方法一:在AndroidManifest.xml中配置假设不想让软件在横竖屏之间切换,最简单的办法就是在项目的AndroidManifest.xml中找到你所指定的activity中加上android:screenOrientation属性。

2401_84520182的博客 1444

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

android悬浮框横竖屏切换,Activity如何管理对话框(横竖屏切换保持对话框的最佳办法)...

在Activity中我们要保持横竖屏切换时用户的数据一般是用onSaveinstancestate的方式,dialog也是可以的,但是有更好的方法,Activity专门对dialog提供了自己的管理机制。我们都知道Activity负责生成、保存、恢复对话框,下面我们就来了解一下Activity的对话框管理机制。在Activity的源码中我们可以看到private static class Mana...

weixin_39565777的博客 584

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

android 悬浮窗口禁止横屏显示,Android禁止横屏竖屏切换

在Android中要让一个程序的界面始终保持一个方向,不随手机方向转动而变化的办法: 只要在AndroidManifest.xml里面配置一下就可以了。在AndroidManifest.xml的activity(需要禁止转向的activity)配置中加入android:screenOrientation="landscape"属性即可(landscape是横向,portrait是竖屏)。例如:pa...

weixin_42524165的博客 762

【安卓】旋屏跟随

1.设置属性 manifest.xml MainActivity"                   android:label="@string/app_name"                   android:screenOrientation="landscape"                   android:theme="@android:style/Theme.N

lockyblog的博客 448

Android屏幕设置

一、通过配置文件设置手机屏幕方向 找到Android工程文件中的AndroidManifest.xml,接下来对这里面的内容进行修改。 1.横屏设置   在下添加如下内容: android:screenOrientation="landscape" 这个属性就是设置屏幕横屏,如下图所示

Wang_Zhi_Hao的专栏 959

Android 可任意位置移动的悬浮窗

1.悬浮窗权限申请: if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) { if (!Settings.canDrawOverlays(getApplicationContext())) { Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION); startActivityFo.

安卓开发&音视频开发 2万+

安卓-如何用正确的姿势监听Android屏幕旋转

最近在做应⽤内悬浮球功能时,需要监听屏幕旋转事件来对悬浮球的位置进⾏调整,发现有些情况下并不能收到系统回调,思考了⼀翻,做了⼀个屏幕旋转的模拟监听,基本上能达到⽬的。 问题 悬浮球在停⽌拖拽后,需要贴边到⼿机屏幕的左右两侧。 在竖屏状态下,x坐标为0即为左边缘,x坐 标为屏幕宽度即为右边缘。 但是在横屏状态下,情况就⽐较复杂了。现在⼤部分Android⼿机都是刘 海屏的设计,在全屏状态下,悬浮球贴边时不能收到刘海下⾯去,不然就点不到了。 所以此时需要算 出刘海的宽度,以此宽度作为悬浮球左边的起.

Androidbye的博客 745

Android实现自定义方向盘-3添加平滑处理

为了使陀螺仪数据更加平滑和稳定,可以通过应用低通滤波器或使用滑动平均法来减少噪声。以下是如何在现有的代码基础上添加平滑处理的详细步骤。

qq_34358193的博客 829
上一篇: Android Notification 填充 自定义布局
下一篇: Android adb 使用总结 (调试专用)
杨尘心
博客等级 码龄10年 122粉丝 88原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值