LotusLoveNature

日常工作,生活小记

android横竖屏旋转与主题的冲突和解决办法

现在有需求,一个应用需要横竖屏切换,但是theme是@android:style/Theme.Translucent.NoTitleBar。也就是有个背景透明属性在里面。

首先很容易想到加入配置:android:configChanges="orientation|keyboardHidden”

这样本应该就可以横竖屏自由切换了。但是发现一个问题。如果有背景透明的属性,屏幕不会自适应了。

然后尝试加入android:screenOrientation=“sensor”

发现屏幕终于可以自适应切换屏幕了。这算一个小突破。

但是这样做还存在一个问题,它不受系统控制了。系统里面的重力感应开关对它不起作用了。不管是开启还是关闭,应用都是可以切换的。这也不行啊。。

然后看了文档,发现android:screenOrientation还有好几张value。换了一个android:screenOrientation=“user”,文档上说,是使用用户当前首选方向。

@android:style/Theme.Translucent.NoTitleBar

android:configChanges="orientation|keyboardHidden”

android:screenOrientation=“user”

达到了想要的效果。

小结:sensor为什么和theme冲突,可能原因是手机系统原因。现在发现很多控件,系统设置和theme还是有很大关联的。

另外,如果Activity A启动Activity B,但是A是portrait,B是自适应的。那么在B界面上旋转的时候,也会调用到A的oncreate和onresume。也就是虽然A是portait,但是能感应横竖屏切换。这个时候也需要再A中加入onconfig,以免重新oncreate

评论
©LotusLoveNature | Powered by LOFTER