Only fullscreen opaque activities can request orientation比较完美的解决方法,黑白屏问题解决
1.原因:
在解决页面跳转时黑屏或者白屏时添加了true, 然后这个时候又设置了页面的方向,从而导致了这个问题。
源码分析问题: 在26的编译版本时是可以正常的使用的,但是当把编译版本升级到27时,就会出现"Only fullscreen activities can request orientation"异常。对源码的分析,得出这是google出于安全的考虑,对android8.0以后的版本做的处理,当一个Activity固定方向并且是透明的,在8.0以后的版本中就会抛出异常
Entry ent = AttributeCache.instance().get(packageName,realTheme, com.android.internal.R.styleable.Window, userId);
final boolean translucent = ent != null && (ent.array.getBoolean(com.android.internal.R.styleable.Window_windowIsTranslucent, false)|| (!ent.array.hasValue(com.android.internal.R.styleable.Window_windowIsTranslucent) && ent.array.getBoolean(com.android.internal.R.styleable.Window_windowSwipeToDismiss,false)));
fullscreen = ent != null && !ent.array.getBoolean(com.android.internal.R.styleable.Window_windowIsFloating, false) && !translucent;
fullscreen = ent != null && !ActivityInfo.isTranslucentOrFloating(ent.array);
noDisplay = ent != null && ent.array.getBoolean(com.android.internal.R.styleable.Window_windowNoDisplay, false);if (ActivityInfo.isFixedOrientation(requestedOrientation) && !fullscreen && appInfo.targetSdkVersion > O) {throw new IllegalStateException("Only fullscreen activities can request orientation");
}
上面是27的源码片段,通过上面我们可以看出当 三个条件同时满足的时候,系统会抛出"Only fullscreen activities can request orientation"异常。先分别来说说这三个条件都表示什么意思:
- ActivityInfo.isFixedOrientation(requestedOrientation) ——
表示判断当前的|Activity是否固定了方向,truea为固定了方向。 - fullscreen —— 表示Activity是否是透明的或者是否悬浮在Activity上,是透明的或者悬浮在Activity上fullscreen就等于false.
以下三种情况认为不是“fullscreen“:
- “windowIsTranslucent”为true;
- “windowIsTranslucent”为false,但“windowSwipeToDismiss”为true;
- “windowIsFloating“为true;
- appInfo.targetSdkVersion > O —— 表示编译版本号大于26
当以上的三个条件同时满足的时候,系统框架就会抛出异常,那意思我们只能让上面的条件不满足就可以了
问题解决
- 不固定Activity的方向
- 不适配8.0及以上手机(当你看到这个问题时,肯定是要适配8.0及以上的,所以当我没有说)
- 修改AppTheme的样式为下,windowIsTranslucent设置为false,同时设置windowDisablePreview为true.(这个方法,可以同时满足透明和固定方向)
<resources><!-- Base application theme. --><style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"><!-- Customize your theme here. --><item name="android:windowFullscreen">true</item><item name="android:windowIsTranslucent">false</item><item name="android:windowDisablePreview">true</item></style></resources>
注:android 9.0 去掉了这个限制,原来Activity中对透明Activity的限制取消了。
参考:https://blog.csdn.net/LoveDou0816/article/details/79129324
2.黑/白屏原因:
当然白色闪屏的停留是因为 application 的主题样式android:theme="@style/AppTheme" 使用了 Theme.Light 题导致的,Light 样式的 windowBackground、colorBackground、colorForeground 等属性的值均为 light 也就是白色偏亮,所以才会出现白色闪屏。如果使用了 Theme.Black就会出现黑屏。
解决黑白屏的方法有两种方法:
方法有两种,一种是为them设置背景,二是为them设置透明属性。
方式一:设置背景(windowBackground)
<!-- 为 Theme 设置背景图 --><style name="AppTheme" parent="android:style/Theme.Black.NoTitleBar.Fullscreen"><item name="android:windowBackground">@drawable/splash_bg</item></style>
设置背景后,启动程序时会先显示这个图片,因而避免了黑白屏。
方式二:设置透明度(windowIsTranslucent)
<!-- 为 Theme 设置透明属性 --><style name="AppTheme" parent="android:style/Theme.Black.NoTitleBar.Fullscreen"><item name="android:windowIsTranslucent">true</item></style>
程序启动后不会黑屏而是透明,等到界面初始化完成后才一次性显示出来。
两者的优缺点:
- 为 Theme 设置背景图 给人程序启动快的感觉,界面先显示背景图,然后再刷新其他界面控件,刷新不同步。
- 为 Theme 设置透明属性 给人程序启动慢的感觉,界面会一次性刷出来,刷新同步。
黑白屏问题参考:https://blog.csdn.net/fancylovejava/article/details/39643449
Only fullscreen opaque activities can request orientation比较完美的解决方法,黑白屏问题解决相关推荐
- Android之Only fullscreen opaque activities can request orientation
1 问题 使用透明的activity主题,并且固定了方向,在Android8.0手机上提示错误如下 Only fullscreen opaque activities can request orie ...
- Android8.0适配-Only fullscreen opaque activities can request orientation
背景 2018年7月18日上午,电信终端产业协会(TAF)发布<移动应用软件高API等级预置与分发自律公约>(以下简称<公约>).OPPO.华为.百度.360.阿里.小米.VI ...
- 安卓开发——android8.0应用崩溃,报错: Only fullscreen opaque activities can request orientation
上周末升级了最新的MIUI 8.1.18开发版,早早的吃上了奥利奥 Android O(虽然在miui下并没有什么变化(-_-),但还是很开心的,毕竟我的小米MIX2终于可以用到了之前只是内测的全屏手 ...
- 分享qq报错Only fullscreen opaque activities can request orientation
这两天突然发现了一个项目中分享链接到qq时崩溃但分享到微信却啥事没有的问题,然后连上usb,查看error发现报了这样一个错:Only fullscreen opaque activities can ...
- android opaque,Android 8.0系统 Only fullscreen opaque activities can request orientation
最近在华为8.0系统的手机中遇到Only fullscreen opaque activities can request orientation Caused by: java.lang.Illeg ...
- Android Only fullscreen opaque activities can request orientation
原因 错误是由全屏透明 Activity 引起的 Caused by: java.lang.IllegalStateException: Only fullscreen opaque activiti ...
- Only fullscreen opaque activities can request orientation
这个问题是在android8.0以上的手机测试出来的 自己的处理方法 把配置文件中 android:screenOrientation="portrait" 删除即可.
- 使用nginx做反代时遇到413 Request Entity Too Large的解决方法
使用nginx做反代时遇到413 Request Entity Too Large的解决方法 参考文章: (1)使用nginx做反代时遇到413 Request Entity Too Large的解决 ...
- Nginx出现“413 Request Entity Too Large”错误解决方法
今天使用phpmyadmin的导入功能的时候,由于sql文件过大,服务器出现错误提示了,413 Request Entity Too Large,google了一下,发现是Nginx的错误提示. 解 ...
- MVC中提示错误:从客户端中检测到有潜在危险的 Request.Form 值的详细解决方法...
今天往MVC中加入了一个富文本编辑框,在提交信息的时候报了如下的错误:从客户端(Content="<EM ><STRONG ><U >这是测试这...&q ...
最新文章
- centos7httpd服务的搭建
- python下的orm基本操作(1)--Mysql下的CRUD简单操作(含源码DEMO)
- python爬虫经典教程-python爬虫经典例子有哪些
- javax.servlet.GenericServlet类(协议无关版本)
- 有逼格的产品经理的工作台长啥样?
- Excel中HYPERLINK链接图片的用法
- Live meeting+OCS 二次开发手记
- Android studio之Unknown run configuration type AndroidRunConfigurationType解决办法
- AUTOSAR从入门到精通100讲(四十一)-动态架构设计中的时序图
- Cookie知识总结(-)
- Android 用MediaCodec ,MediaExtractor解码播放MP4文件
- 纯java程序jdbcjar包放在哪_oracle 11g jdbc jar包在哪个文件目录
- web2.0网站的四大特性简述
- Python学习笔记之蓝牙模块通讯-Pybluez
- 全息投影技术及其实现(附素材下载)
- 详解万向锁,欧拉旋转角,slam中万向锁的理解
- PLC1200 模拟量采集
- 【柒穆雨】什么是平面设计,学习平面设计需要具备什么条件?
- 自己动手开发安卓版按键精灵
- 【zz】陈硕:当析构函数遇到多线程──C++ 中线程安全的对象回调
热门文章
- GNS3基础路由技术实验
- iOS菜鸟笔记4:一个简单的TableView
- 怎么给PDF文档加页码,PDF文档加页码的方法
- finecms aip.php漏洞,代码审计| FineCMS的GetShell姿势
- Qt Quick事件处理之鼠标 键盘 定时器
- Concatenated Multiples(思维,数学)
- Docker 启动nginx报错Error starting userland proxy: listen tcp 0.0.0.0:80: bind: address already in use.
- 苹果手机电池保养再用两年!
- 苹果手机换电池对手机有影响吗_你知道你的手机电池多久换一次吗?
- noip2018翻车记