Android全屏显示和屏幕旋转的处理

全屏显示

全屏隐藏状态栏

Window window = getWindow();
int flag = WindowManager.LayoutParams.FLAG_FULLSCREEN;
requestWindowFeature(Window.FEATURE_NO_TITLE); //隐藏状态栏
window.setFlags(flag, flag); //全屏显示

注意:必须在setContentView之前执行,否则会报错。另外这种全屏显示方式的缺点是,会有隐藏标题栏和隐藏状态栏的动画过渡效果。

通过Theme控制

自定义全屏样式

res > values > themes.xml

<style name="AppTheme.ZGSBSPlayer.FullScreen" parent="Theme.AppCompat.NoActionBar">
    <item name="windowNoTitle">true</item>
    <item name="android:windowFullscreen">true</item>
</style>

AndroidManifest.xml

<activity android:name=".vrplayer.VRPlayerActivity"
    android:theme="@style/AppTheme.ZGSBSPlayer.FullScreen">

调用系统全屏样式

可能会报错 You need to use a Theme.AppCompat theme (or descendant) with this activity

android:theme="@android:style/Theme.NoTitleBar.Fullscreen"

横竖屏切换

默认当用户手机重力感应器打开后,屏幕旋转时,Activity的生命周期会重新加载onDestroy-> onCreate即当前Activity被销毁了。
想要很好的支持屏幕旋转,建议在res中建立layout-land和layout-port两个文件夹,分别设定布局。

固定屏幕方向

AndroidManifest属性控制

设置AndroidManifest.xml对应的 activity 属性
默认的情况下,应用启动后,会固定为指定的屏幕方向,即使屏幕旋转,Activity也不会出现销毁或者转向等任何反应。

android:screenOrientation="landscape"  //横屏
android:screenOrientation="portrait"   //竖屏

代码中强制设置为横屏

@Override
protected void onResume() {
    if (getRequestedOrientation() != ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
    }
    super.onResume();
}

强制开启屏幕旋转效果

如果手机关闭了重力感应器,或者同上activity中固定了屏幕方向,则默认情况下该Activity不会响应屏幕旋转事件。
如果在此情况下依然希望Activity响应屏幕旋转,则在onCreate()方法中添加代码

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR);

屏幕旋转时防止Activity被销毁

AndroidManifest.xml

# 在相应的Activity声明中添加属性
android:configChanges="orientation|keyboard|keyboardHidden|screenSize|layoutDirection" 
  • orientation #屏幕在纵向和横向间旋转
  • keyboardHidden #键盘显示或隐藏
  • keyboard #键盘类型变更如从9键盘切换到全键盘等
  • fontScale #用户变更了首选的字体大小
  • locale #用户选择了不同的语言设定
  • touchscreen或navigation #键盘或导航方式变化

以前只需要添加orientation后续需多加一个screenSize再后来需要添加上layoutDirection否则onConfigurationChanged不会被调用

如果缺少了keyboardHidden选项,不能防止Activity的销毁,并且在之后提到的onConfigurationChanged事件中只能捕获到坚屏变横屏的事件,不能捕获横屏变坚屏。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值