1.问题背景
我在写拍照、选择相册图片的时候,引用了一个强大的第三方框架PictureSelectorLight,功能很强大,有兴趣的可以去看一下。但是这个框架只适配到了安卓6.0,我用的测试机是小米6X(8.0),华为荣耀畅玩6X(8.0),华为荣耀畅玩4X(5.0),在小米6X和荣耀畅玩4X都运行良好,但是在荣耀畅玩6X里报错了
Caused by: java.lang.IllegalStateException: Only fullscreen opaque activities can request orientation
大致意思是只有不透明的全屏activity可以自主设置界面方向
2.错误展示
接下来我们看一下全部错误截图
GIF我就不展示了
那么我们定位到PictureBaseActivity进去看一下,发现这是人家的第三方库啊,我们没法改动人家的代码,也没法改动它的style
3.错误解决
根据字面意思:只有不透明的全屏activity可以自主设置界面方向
那么是不是我们把activity的主题换成不透明或者把activity的方向设置去掉就好了呢?
3.1在主style里将主题写成透明,注意最后一项
<item name="android:windowIsTranslucent">true</item>
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="actionBarSize">48dip</item>
<item name="android:windowIsTranslucent">true</item>
</style>
3.2在主AndroidManifest.xml文件中,将方向设置screenOrientation属性去掉
3.3定义一个透明的Activity主题:增加android:windowIsTranslucent属性为true,并设置透明的背景。而对于非要使用对话框样式的Activity,那么就对照对话框的Theme进行设置。
但是!!!
这三种常规的方法在我这里不起作用,因为我的style本就是透明,而且我的AndroidManifwst.xml也没有写方向设置吖。
于是我去了作者的GitHub(https://github.com/luyifei666/PictureSelectorLight)翻了翻,发现了很重要的话
然后我看了看我的gradle配置,
compileSdkVersion 27
defaultConfig {
applicationId "com.clfsjkj.govcar"
minSdkVersion 16
targetSdkVersion 26
versionCode 1
versionName "1.0.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
multiDexEnabled true
//添加如下配置就OK了
javaCompileOptions { annotationProcessorOptions { includeCompileClasspath = true } }
ndk {
//选择要添加的对应cpu类型的.so库。
abiFilters 'armeabi'
//, 'armeabi-v7a', 'armeabi-v8a', 'x86', 'x86_64', 'mips', 'mips64'
}
}
你没看错,我的targetSdkVersion 是 26(8.0),我试着将targetSdkVersion 26降到了23(android 6.0),然后build再run
成功了,居然不报错了……
如果前三种方法不适用于您,您可以试试我这样的方法。
该文章仅作为一个踩坑记录,并无其他意义。
end.