zoukankan      html  css  js  c++  java
  • 横竖屏切换

    getRequestOrientation()  或者 getResource().getConfiguration().orientation 可以得到当前activity是处于横屏还是竖屏

    setRequestOrientation()    可以设置当前的activity的横竖屏

    例:如果是横屏 设置为竖屏

    if(getRequestOrientation() == ActivityInfo.SCREEN_ORIENTATION_LANSCAPE){

               setRequestOrientation(ActvitiyInfo.SCREEN_ORIENTATION_PORTRAIT);

    }

    if(getResource().getConfiguration().orientation == Configuration.ORIENTATION_LANCSCAPE){

    }

    可以在activity的属性 android:screenOrientation=""  中设置当前activity的固定为横屏或者竖屏, 值可取 landscape|portrait

    横竖屏切换的生命周期:

    当前Activity产生事件弹出Toast和AlertDialog的时候Activity的生命
    周期不会有改变

    以下内容为转载内容:

    1、新建一个Activity,并把各个生命周期打印出来

    2、运行Activity,得到如下信息

    onCreate-->
    onStart-->
    onResume-->

    3、按crtl+f12切换成横屏时

    onSaveInstanceState-->
    onPause-->
    onStop-->
    onDestroy-->
    onCreate-->
    onStart-->
    onRestoreInstanceState-->
    onResume-->

    4、再按crtl+f12切换成竖屏时,发现打印了两次相同的log

    onSaveInstanceState-->
    onPause-->
    onStop-->
    onDestroy-->
    onCreate-->
    onStart-->
    onRestoreInstanceState-->
    onResume-->
    onSaveInstanceState-->
    onPause-->
    onStop-->
    onDestroy-->
    onCreate-->
    onStart-->
    onRestoreInstanceState-->
    onResume-->

    5、修改AndroidManifest.xml,把该Activity添加
    android:configChanges="orientation",执行步骤3

    onSaveInstanceState-->
    onPause-->
    onStop-->
    onDestroy-->
    onCreate-->
    onStart-->
    onRestoreInstanceState-->
    onResume-->

    6、再执行步骤4,发现不会再打印相同信息,但多打印了一行onConfigChanged

    onSaveInstanceState-->
    onPause-->
    onStop-->
    onDestroy-->
    onCreate-->
    onStart-->
    onRestoreInstanceState-->
    onResume-->
    onConfigurationChanged-->

    7、把步骤5的android:configChanges="orientation" 改成
    android:configChanges="orientation|keyboardHidden",执行步骤3,就只打印
    onConfigChanged

    onConfigurationChanged-->

    8、执行步骤4

    onConfigurationChanged-->
    onConfigurationChanged-->

    总结:

    1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,
    切横屏时会执行一次,切竖屏时会执行两次

    2、设置Activity的android:configChanges="orientation"时,切屏还是会重新调
    用各个生命周期,切横、竖屏时只会执行一次

    3、设置Activity的android:configChanges="orientation|keyboardHidden"时,
    切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法

    但自己测试后结果为:  切换横竖屏只走一遍生命周期: onSaveInstanceState()->onPause()->onStop()->onDestroy()->onCreate()->onStart()->onRestoreInstanceState()->onResume()  而不是当横屏切换到竖屏走两遍 ,不知道怎么回事

                                  当设置activity  configChanges="orientation" 或者设置 configChanges="orientation|keyboardHidden"时生命周期为:

                                   无论是横屏切换竖屏或者竖屏切换横屏都只走一遍onConfigurationChanges(),不走其它生命周期

  • 相关阅读:
    UVA 818 Cutting Chains 切断圆环链 (暴力dfs)
    UVA 211 The Domino Effect 多米诺效应 (回溯)
    UVA225 Golygons 黄金图形(dfs+回溯)
    UVA208 Firetruck 消防车(并查集,dfs)
    UVA11212 EditingaBook ( IDA*搜索)
    UVA 140 Brandwidth 带宽 (dfs回溯)
    uva 1601 poj 3523 Morning after holloween 万圣节后的早晨 (经典搜索,双向bfs+预处理优化+状态压缩位运算)
    UVA10410 TreeReconstruction 树重建 (dfs,bfs序的一些性质,以及用栈处理递归 )
    cdoj 414 八数码 (双向bfs+康拓展开,A*)
    UVA 246 10-20-30 10-20-30游戏 模拟+STL双端队列deque
  • 原文地址:https://www.cnblogs.com/lianghui66/p/2749816.html
Copyright © 2011-2022 走看看