电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Android如何判斷頁面是否全屏

瀏覽:2日期:2022-09-19 18:02:24

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如何判斷頁面是否全屏的詳細內容,更多關于Android 判斷頁面是否全屏的資料請關注好吧啦網其它相關文章!

標簽: Android
相關文章:
主站蜘蛛池模板: 卸料器-卸灰阀-卸料阀-瑞安市天蓝环保设备有限公司 | 沈阳缠绕包装机厂家直销-沈阳海鹞托盘缠绕包装机价格 | 广东泵阀展|阀门展-广东国际泵管阀展览会 | 杭州翻译公司_驾照翻译_专业人工翻译-杭州以琳翻译有限公司官网 组织研磨机-高通量组织研磨仪-实验室多样品组织研磨机-东方天净 | 二手Sciex液质联用仪-岛津气质联用仪-二手安捷伦气质联用仪-上海隐智科学仪器有限公司 | 辊道窑炉,辊道窑炉厂家-山东艾希尔 | 根系分析仪,大米外观品质检测仪,考种仪,藻类鉴定计数仪,叶面积仪,菌落计数仪,抑菌圈测量仪,抗生素效价测定仪,植物表型仪,冠层分析仪-杭州万深检测仪器网 | 伟秀电气有限公司-10kv高低压开关柜-高低压配电柜-中置柜-充气柜-欧式箱变-高压真空断路器厂家 | 都江堰招聘网-都江堰人才网 都江堰人事人才网 都江堰人才招聘网 邢台人才网_邢台招聘网_邢台123招聘【智达人才网】 | 济南品牌包装设计公司_济南VI标志设计公司_山东锐尚文化传播 | 钢丝绳探伤仪-钢丝绳检测仪-钢丝绳探伤设备-洛阳泰斯特探伤技术有限公司 | 南昌旅行社_南昌国际旅行社_南昌国旅在线 | 食品级焦亚硫酸钠_工业级焦亚硫酸钠_焦亚硫酸钠-潍坊邦华化工有限公司 | 北京百度网站优化|北京网站建设公司-百谷网络科技 | 污水处理设备,一体化泵站,一体化净水设备-「梦之洁环保设备厂家」 | 高柔性拖链电缆-聚氨酯卷筒电缆-柔性屏蔽电缆厂家-玖泰电缆 | ph计,实验室ph计,台式ph计,实验室酸度计,台式酸度计 | 求是网 - 思想建党 理论强党| 高柔性拖链电缆-聚氨酯卷筒电缆-柔性屏蔽电缆厂家-玖泰电缆 | 光伏家 - 太阳能光伏发电_分布式光伏发电_太阳能光伏网 | 三板富 | 专注于新三板的第一垂直服务平台 | 尾轮组_头轮组_矿用刮板_厢式刮板机_铸石刮板机厂家-双驰机械 | 离子色谱自动进样器-青岛艾力析实验科技有限公司 | 安平县鑫川金属丝网制品有限公司,声屏障,高速声屏障,百叶孔声屏障,大弧形声屏障,凹凸穿孔声屏障,铁路声屏障,顶部弧形声屏障,玻璃钢吸音板 | 深圳货架厂_仓库货架公司_重型仓储货架_线棒货架批发-深圳市诺普泰仓储设备有限公司 | 天津力值检测-天津管道检测-天津天诚工程检测技术有限公司 | LCD3D打印机|教育|桌面|光固化|FDM3D打印机|3D打印设备-广州造维科技有限公司 | 美名宝起名网-在线宝宝、公司、起名平台 | 哈希余氯测定仪,分光光度计,ph在线监测仪,浊度测定仪,试剂-上海京灿精密机械有限公司 | 郑州爱婴幼师学校_专业幼师培训_托育师培训_幼儿教育培训学校 | 斗式提升机,斗式提升机厂家-淄博宏建机械有限公司 | 耐磨陶瓷,耐磨陶瓷管道_厂家-淄博拓创陶瓷科技 | 一路商机网-品牌招商加盟优选平台-加盟店排行榜平台 | 辽宁资质代办_辽宁建筑资质办理_辽宁建筑资质延期升级_辽宁中杭资质代办 | 烟台条码打印机_烟台条码扫描器_烟台碳带_烟台数据采集终端_烟台斑马打印机-金鹏电子-金鹏电子 | 模型公司_模型制作_沙盘模型报价-中国模型网 | C形臂_动态平板DR_动态平板胃肠机生产厂家制造商-普爱医疗 | Pos机办理_个人商户免费POS机申请-拉卡拉办理网 | 圣才学习网-考研考证学习平台,提供万种考研考证电子书、题库、视频课程等考试资料 | 微信聊天记录恢复_手机短信删除怎么恢复_通讯录恢复软件下载-快易数据恢复 | 铸铝门厂家,别墅大门庭院大门,别墅铸铝门铜门[十大品牌厂家]军强门业 |