返回顶部
首页 > 资讯 > 精选 >Android怎么判断页面是否全屏
  • 410
分享到

Android怎么判断页面是否全屏

2023-06-14 10:06:14 410人浏览 八月长安
摘要

小编给大家分享一下Android怎么判断页面是否全屏,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!Android 想判断 Activity 是否是全屏,网上找了些方法,看到有直接获取 flags 和一个具体的值比较,并没有

小编给大家分享一下Android怎么判断页面是否全屏,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

Android 想判断 Activity 是否是全屏,网上找了些方法,看到有直接获取 flags 和一个具体的值比较,并没有用,其实分析下来也觉得应该不对。大多都是如何设置全屏和取消全屏,并没有判断是否全屏的方法。

其实全屏控制要么通过主题设置,要么代码 addFlags,最终都会到 Window 的 setFlags 方法里,下面看源码

public void setFlags(int flags, int mask) {  final WindowManager.LayoutParams attrs = getAttributes();  attrs.flags = (attrs.flags&~mask) | (flags&mask);  mForcedWindowFlags |= mask;  dispatchWindowAttributesChanged(attrs);}

主要的逻辑就是这一句:

attrs.flags = (attrs.flags&~mask) | (flags&mask)

是位运算,看一下 attrs 里可以设置的 flag 常量

public static final int FLAG_ALLOW_LOCK_WHILE_SCREEN_ON  = 0x00000001;public static final int FLAG_DIM_BEHIND          = 0x00000002;public static final int FLAG_BLUR_BEHIND         = 0x00000004;public static final int FLAG_NOT_FOCUSABLE        = 0x00000008;public static final int FLAG_NOT_TOUCHABLE        = 0x00000010;public static final int FLAG_NOT_TOUCH_MODAL       = 0x00000020;public static final int FLAG_TOUCHABLE_WHEN_WAKING    = 0x00000040;public static final int FLAG_KEEP_SCREEN_ON        = 0x00000080;public static final int FLAG_LAYOUT_IN_SCREEN       = 0x00000100;public static final int FLAG_LAYOUT_NO_LIMITS       = 0x00000200;public static final int FLAG_FULLSCREEN          = 0x00000400;public static final int FLAG_FORCE_NOT_FULLSCREEN     = 0x00000800;public static final int FLAG_DITHER            = 0x00001000;public static final int FLAG_SECURE            = 0x00002000;public static final int FLAG_SCALED            = 0x00004000;public static final int FLAG_IGNORE_CHEEK_PRESSES     = 0x00008000;public static final int FLAG_LAYOUT_INSET_DECOR      = 0x00010000;public static final int FLAG_ALT_FOCUSABLE_IM       = 0x00020000;public static final int FLAG_WATCH_OUTSIDE_TOUCH     = 0x00040000;public static final int FLAG_SHOW_WHEN_LOCKED       = 0x00080000;public static final int FLAG_SHOW_WALLPAPER        = 0x00100000;public static final int FLAG_TURN_SCREEN_ON        = 0x00200000;public static final int FLAG_DISMISS_KEYGUARD       = 0x00400000;public static final int FLAG_SPLIT_TOUCH         = 0x00800000;public static final int FLAG_HARDWARE_ACCELERATED     = 0x01000000;public static final int FLAG_LAYOUT_IN_OVERSCAN      = 0x02000000;public static final int FLAG_TRANSLUCENT_STATUS      = 0x04000000;public static final int FLAG_TRANSLUCENT_NAVIGATioN    = 0x08000000;public static final int FLAG_LOCAL_FOCUS_MODE       = 0x10000000;public static final int FLAG_SLIPPERY           = 0x20000000;public static final int FLAG_LAYOUT_ATTACHED_IN_DECOR   = 0x40000000;public static final int FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS = 0x80000000;

很明显,这些十六进制值换成二进制的话,都只有一个 1,而且每个变量的 1 处于不同的位置,所以设置一个 flag 肯定就是将 flags 的对应位置设为 1,而 clearFlags 就是将对应位置设为 0。

比如 FLAG_FULLSCREEN 值为 0x00000400,换成二进制的话后面的位就是 0100 0000 0000,它控制的是从右向左数第 11 位。而 addFlags 时两个参数 flags 和 mask 一样。所以 (attrs.flags&~mask) | (flags&mask) 的 flags&mask 自己和自己作与运算,结果还是自己,而 ~mask 结尾为 1011 1111 1111,和原来的 flags 作与运算,则第 11 位肯定变成了 0,其它位和 1 作与运算,保持原样,再和后面做或,则第 11 位又变成了 1,而且这次运算只会影响到第 11 位,其它位置不变,不管原来第 11 位是 0 还是 1,结果都会变成 1。

相似的,如果是 clearFlags,第一个参数变成 0,第二个参数是 FLAG_FULLSCREEN,这样 (flags&mask) 必定为 0,只看前面,(attrs.flags&~mask) 这个运算第 11 位必为 0。

其实 (attrs.flags&~mask) | (flags&mask) 前面的与运算会将对应位置变成 0,然后看后面的与运算,后面算出结果对应位置是 1,那最终就是 1,后面算出是 0,那最终也是 0。而后面的控制就是 0 或者自己和自己作个与运算。

说了一大堆废话,其实就是最基础的位运算。那么想判断是否全屏很简单,只要看 flags 从右向左数第 11 位是 0 还是 1,只要与 FLAG_FULLSCREEN 做个逻辑与就行了,除了第 11 位,其它位都变成了 0。

判断方法为:

if ( (getWindow().getAttributes().flags & WindowManager.LayoutParams.FLAG_FULLSCREEN)          == WindowManager.LayoutParams.FLAG_FULLSCREEN) {  // 是全屏}

看完了这篇文章,相信你对“Android怎么判断页面是否全屏”有了一定的了解,如果想了解更多相关知识,欢迎关注编程网精选频道,感谢各位的阅读!

--结束END--

本文标题: Android怎么判断页面是否全屏

本文链接: https://lsjlt.com/news/270061.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Android怎么判断页面是否全屏
    小编给大家分享一下Android怎么判断页面是否全屏,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!Android 想判断 Activity 是否是全屏,网上找了些方法,看到有直接获取 flags 和一个具体的值比较,并没有...
    99+
    2023-06-14
  • Android如何判断页面是否全屏
    Android 想判断 Activity 是否是全屏,网上找了些方法,看到有直接获取 flags 和一个具体的值比较,并没有用,其实分析下来也觉得应该不对。大多都是如何设置全屏和取消...
    99+
    2024-04-02
  • Android中判断屏幕是否亮屏和是否解锁功能
     1.屏幕是否亮屏: PowerManager powerManager = (PowerManager) context.getSystemService(Con...
    99+
    2022-06-06
    解锁 Android
  • js如何判断是否是手机页面
    这篇文章给大家分享的是有关js如何判断是否是手机页面的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。代码:<script> if (/mobile/i.tes...
    99+
    2024-04-02
  • HTML5中怎么判断用户是否正在浏览页面
    本篇文章为大家展示了HTML5中怎么判断用户是否正在浏览页面,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。现在,HTML5里页面可见性接口就提供给了程序员一个方法,...
    99+
    2024-04-02
  • Android全面屏适配与判断超详细讲解
    目录1.全面屏的适配2.判断是否为全面屏3.全面屏手机的虚拟导航和全面屏手势的判断1.全面屏的适配 全面屏出现后,如果不做适配,屏幕上会出现上下黑边,影响视觉效果。 针对此问题,An...
    99+
    2023-01-28
    Android全面屏适配 Android全面屏判断
  • JS如何判断页面是否有滚动条
    这篇文章主要介绍JS如何判断页面是否有滚动条,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!为什么要判断滚动条判断滚动条的需求在弹窗插件中用的较多,因为弹窗大多会添加 overflow...
    99+
    2024-04-02
  • Android如何判断是否Root
    这篇文章主要为大家展示了“Android如何判断是否Root”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Android如何判断是否Root”这篇文章吧。为了照顾那些着急的同学,先直接给出结论:...
    99+
    2023-06-28
  • android怎么判断服务是否在运行
    在Android中,可以通过以下方法判断服务是否在运行:1. 使用ActivityManager来获取正在运行的服务列表,然后遍历列...
    99+
    2023-10-19
    android
  • android怎么判断内容是否为数字
    要判断一个字符串是否为数字,可以使用Android中的TextUtils.isDigitsOnly()方法。这个方法会检查字符串中的...
    99+
    2024-03-01
    android
  • android怎么判断字符串是否相等
    在Android中,判断两个字符串是否相等可以使用equals()方法或者equalsIgnoreCase()方法。 使用equa...
    99+
    2024-03-01
    android
  • c语言怎么判断密码是否安全
    在C语言中,可以使用以下方法来判断密码的安全性:1. 检查密码长度:使用strlen函数获取密码的长度,然后判断其是否满足最小长度要...
    99+
    2023-10-19
    c语言
  • Android项目中如何实现判断屏幕是否亮屏与解锁
    本篇文章给大家分享的是有关Android项目中如何实现判断屏幕是否亮屏与解锁,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。 1.屏幕是否亮屏:PowerManager...
    99+
    2023-05-31
    android 亮屏 roi
  • php怎么判断数组里面值是否为空
    在PHP代码中,我们经常需要判断数组里面的值是否为空来进行后续的操作。本文将详细介绍PHP中判断数组值是否为空的方法。一、判断单个数组值是否为空判断单个数组值是否为空,我们可以使用PHP内置函数empty()和isset(),两个函数的用法...
    99+
    2023-05-14
  • javascript怎么判断是否数字
    这篇文章给大家分享的是有关javascript怎么判断是否数字的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。javascript判断是否数字的方法:1、使用【isNaN()】函数,是js自带的全局函数;2、使用正...
    99+
    2023-06-14
  • 怎么判断mysql是否开启
    这篇文章主要讲解了“怎么判断mysql是否开启”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么判断mysql是否开启”吧!1、使用sql语句直接修改全局变量,数据库服务无需重启,但重启后变...
    99+
    2023-06-20
  • 怎么判断win10是否中毒
    要判断Windows 10是否中毒,可以进行以下步骤:1. 更新和运行杀毒软件:确保您的杀毒软件是最新版本,并对整个系统进行全面扫描...
    99+
    2023-09-04
    win10
  • Android 判断是否有外网连接
    Android里判断是否可以上网,常用的是如下方法: private boolean isNetworkAvailable() { // 得到网络连接信息 Conn...
    99+
    2022-06-06
    连接 Android
  • Android判断是否Root方法介绍
    为了照顾那些着急的同学,先直接给出结论: private static final String[] rootRelatedDirs = new String[]{ ...
    99+
    2024-04-02
  • Android应用中怎么判断服务是否运行
    这期内容当中小编将会给大家带来有关Android应用中怎么判断服务是否运行,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。实现代码: public boolean isServiceWork(Context...
    99+
    2023-05-31
    android roi
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作