Android 8.0 Only fullscreen activities can request orientation解决方法
原文:Android 8.0 Only fullscreen activities can request orientation解决方法 | Stars-One的杂货小窝
公司的项目坑太多,现在适配高版本的出现了上面的这个问题..
个人项目中我一般不对这个Activity朝向orientation属性进行更改
出现这个问题的原因是Android8.0的限制,只有全屏(fullscreen)的Activity才能去设置横/竖屏的方向,所以解决方法从下面几个方向入手
分析
从版本入手,降低版本,低版本没有这个限制
从Activity方向入手,取消设置横/竖屏(也就是AndroidMainfest中删除Activity的orientation的属性),或者是将Activity设置为全屏的
那么怎么知道Activity是不是属于全屏的,由下面的属性可以判断(定义在style文件里)
1.“windowIsTranslucent”为true;
2.“windowIsTranslucent”为false,但“windowSwipeToDismiss”为true;
3.“windowIsFloating“为true;
符合上面的某点规则的,说明Activity不是fullScreen
我们按照上面的规则,在styles.xml文件中定义好主题,之后给Activity设置即可
上面说的,可能项目的Activity过多,不好更改,还可以使用代码的方式,将Activity的orientation属性还原为默认值SCREEN_ORIENTATION_UNSPECIFIED(通过反射)
还有一点可以考虑,就是让非全屏的Activity的orientation属性设置behind,让它跟随上个Activity保持相同的屏幕方向即可
基于以上的分析,总结得出下面几种解决方法
解决方法
修改targetSdk版本
将build.gradle里的targetSdk修改为26以下(包含26)

设置Activity为全屏
通过定义style.xml属性,将Activity设置为全屏即可
1.“windowIsTranslucent”为true;
2.“windowIsTranslucent”为false,但“windowSwipeToDismiss”为true;
3.“windowIsFloating“为true;
符合上面的某点规则的,说明Activity不是fullScreen,按照上面的定义,反向设置即可,如
<style name="AppTheme" parent="Base.Theme.AppCompat.Light.DarkActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="windowIsTranslucent">false</item>
<item name="windowSwipeToDismiss">false</item>
</style>
然后在AndroidManiFest.xml文件中,给Activity设置style属性,如
<activity
android:name="com.tjsoft.advice.ui.More"
android:screenOrientation="landscape"
android:theme="@style/AppTheme" />
通过反射重置orientation
具体参考Only fullscreen activities can request orientation终极解决方法_LiteHeaven的专栏-CSDN博客,本人未测试过
设置orientation为behind
这种方法是将非fullscreen的Activity的orientation设置为behind,让其屏幕方向和上个Activity相同,这样就不会出现问题了
删除Activity设置的orientation属性
这个是终极大法,就是不给Activity设置orientation,那么就不会出现问题啦
参考
- Only fullscreen activities can request orientation?一个搞笑的坑! - 知乎
- Only fullscreen activities can request orientation终极解决方法_LiteHeaven的专栏-CSDN博客
Android 8.0 Only fullscreen activities can request orientation解决方法的更多相关文章
- Only fullscreen activities can request orientation
问题 当我们把targetSdkVersion升级到27,buildToolsVersion和相关的support library升级到27.0.2后,在Android 8.0(API level 2 ...
- Android 6.0 SDK 找不到HttpClient的解决方法
一.情况描述 在eclipse或Android Studio开发时(笔者目前只用过Android Studio),设置Android SDK的编译版本为23时,且使用了httpClient相关类的库项 ...
- Android 6.0删除Apache HttpClient相关类的解决方法
相应的官方文档如下: 上面文档的大致意思是,在Android 6.0(API 23)中,Google已经移除了Apache HttpClient相关的类,推荐使用HttpUrlConnection. ...
- Android Api 27 在 Android 8.0 上出现 Only fullscreen opaque activities can request orientation 的解决情况
刚上班,没有业务开发,对 App 的 Api 由 26 升级到了 27, 结果在 Android 8.0 的设备上会出现 crash . Log 如下: java java.lang.IllegalS ...
- Android studio3.0打开Device File Explore(文件管理器)的方法(图文教程)
Android studio3.0打开Device File Explore(文件管理器)的方法(图文教程) 看到网上AS3.0新增加的查看手机文件的新功能,全部都是转载的,没有几个人心细的把如何打开 ...
- Android开发调试无法连接到夜神模拟器的解决方法
Android开发调试无法连接到夜神模拟器的解决方法: 一般原因是adb的版本不一致造成的!!!!!换成一样的就可以了. 在网上看到的方法,特记录下来: 1.任务管理器里看下,adb.exe以及nox ...
- 错误:Unsupported major.minor version 51.0(jdk版本错误)的解决方法
错误:Unsupported major.minor version 51.0(jdk版本错误)的解决方法 java.lang.UnsupportedClassVersionError: org/ap ...
- 启动android程序和虚拟机时候出现如下错误的解决方法
启动android程序和虚拟机时候出现如下错误的解决方法. 错误重现: [2011-07-13 16:22:48 - Emulator] invalid command-line parameter: ...
- IIS6.0 IIS7.5应用程序池自动停止的解决方法 搜集整理
来源:http://www.guchengnet.com/1499.html IIS6.0 IIS7.5应用程序池自动停止的解决方法 搜集整理 发表于2016年12月14日 有2.3个月没有用本地的i ...
- localhost不能访问127.0.0.1可以访问的原因及解决方法 被打磨的不像人样
localhost不能访问127.0.0.1可以访问的原因及解决方法 作者:admin 时间:2013-12-16 10:58:47 浏览:16599 有时候我们在调试程序的时候,会出 ...
随机推荐
- centos7.9重启网卡提示Failed to start LSB: Bring up/down networking.
前几天给一台机器状态centos7.9系统,设备有2个网口,今天重启网卡一直失败, 查看network状态,怀疑是eth0网卡有问题 查看eth0的网卡配置,发现是eth0网卡的BOOTPROTO=d ...
- map和set的模拟实现|利用红黑树封装map和set|STL源码剖析
前言 那么这里博主先安利一些干货满满的专栏了! 首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助. 高质量干货博客汇总https://blog. ...
- flash8.ocx或其附件之一不能正确注册
运行书中自带光盘中的程序,在该程序的readme说明中,提到这类错误,解决方式是: 因为是免安装程序,需要运行"setup"文件夹下的setup.exe文件,安装控件.在安装完成后 ...
- https、UDP的加密原理,其它传输层的同理
总结: 1.若应用需要使用http协议,那么就直接使用 https + 购买证书的方式. 2.若项目需要使用udp协议(浏览器不支持udp,所以只能是客户端软件包含APP),那么就需要将公钥内置在AP ...
- wmctf的题解&blindless&exit_hook
0x00 好久不见 2023.8.25 夜里 wmctf2023也是一个收获很大的比赛.只做了一个blindless,但是体会到了无泄露做出题来的奥妙.踩过的坑(学到的东西)包括但不限于 调试要用do ...
- 【Android】使用Messenger实现进程间通讯
1 Messenger 简介 Messenger 类实现了 Parcelable 接口,用于进程间传输并处理消息,调用流程如下: Client 通过 bindService() 请求绑定 Serv ...
- Context与Reducer
Context与Reducer Context是React提供的一种跨组件的通信方案,useContext与useReducer是在React 16.8之后提供的Hooks API,我们可以通过use ...
- pico命令
pico命令 pico是一个简单易用.以显示导向为主的文字编辑程序,具有pine电子邮件编写器的风格.在现代Linux系统上,nano即pico的GNU版本是默认安装的,在使用上和pico一模一样. ...
- display的值及作用
display的值及作用 display属性可以设置元素的内部和外部显示类型,元素的外部显示类型将决定该元素在流式布局中的表现,例如块级或内联元素,元素的内部显示类型可以控制其子元素的布局,例如gri ...
- maven打包更改版本号
引入依赖 <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>versions-mave ...