zoukankan      html  css  js  c++  java
  • 横竖屏切换与状态保存的问题

    前面也也说到了App横竖屏切换的时候会销毁当前的Activity然后重新创建一个,你可以自行在生命周期 的每个方法里都添加打印Log的语句,来进行判断,又或者设一个按钮一个TextView点击按钮后,修改TextView 文本,然后横竖屏切换,会神奇的发现TextView文本变回之前的内容了! 横竖屏切换时Act走下述生命周期:
    onPause-> onStop-> onDestory-> onCreate->onStart->onResume
    关于横竖屏切换可能遇到下述问题:

    1.先说下如何禁止屏幕横竖屏自动切换吧,很简单,在AndroidManifest.xml中为Act添加一个属性:android:screenOrientation, 有下述可选值:

    • unspecified:默认值 由系统来判断显示方向.判定的策略是和设备相关的,所以不同的设备会有不同的显示方向。
    • landscape:横屏显示(宽比高要长)
    • portrait:竖屏显示(高比宽要长)
    • user:用户当前首选的方向
    • behind:和该Activity下面的那个Activity的方向一致(在Activity堆栈中的)
    • sensor:有物理的感应器来决定。如果用户旋转设备这屏幕会横竖屏切换。
    • nosensor:忽略物理感应器,这样就不会随着用户旋转设备而更改了("unspecified"设置除外)。

    2.横竖屏时想加载不同的布局

    1)准备两套不同的布局,Android会自己根据横竖屏加载不同布局: 创建两个布局文件夹:layout-land横屏,layout-port竖屏 然后把这两套布局文件丢这两文件夹里,文件名一样,Android就会自行判断,然后加载相应布局了!

    2 )自己在代码中进行判断,自己想加载什么就加载什么:

    我们一般是在onCreate()方法中加载布局文件的,我们可以在这里对横竖屏的状态做下判断,关键代码如下:

    if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE){  
         setContentView(R.layout.横屏);
    }  
    
    else if (this.getResources().getConfiguration().orientation ==Configuration.ORIENTATION_PORTRAIT) {  
        setContentView(R.layout.竖屏);
    }
    

    3. 如何让模拟器横竖屏切换

    如果你的模拟器是GM的话。直接按模拟器上的切换按钮即可,原生模拟器可按ctrl + f11/f12切换!


    4. 状态保存问题:

    这个上面也说过了,通过一个Bundle savedInstanceState参数即可完成! 三个核心方法:

    onCreate(Bundle savedInstanceState);
    onSaveInstanceState(Bundle outState);
    onRestoreInstanceState(Bundle savedInstanceState);
    

    你只重写onSaveInstanceState()方法,往这个bundle中写入数据,比如:

    outState.putInt("num",1);
    

    这样,然后你在onCreate或者onRestoreInstanceState中就可以拿出里面存储的数据,不过拿之前要判断下是否为null哦!

    savedInstanceState.getInt("num");
    

      

  • 相关阅读:
    腾讯2017暑期实习编程题3
    腾讯2017暑期实习编程题2
    腾讯2017暑期实习编程题1
    力扣算法题—098验证二叉搜索树
    题目1451:不容易系列之一
    题目1362:左旋转字符串(Move!Move!!Move!!!)
    HDU 2564 词组缩写
    HDU 2561 二小整数
    HDU 2034 人见人爱A-B
    HDU 1875 畅通工程再续
  • 原文地址:https://www.cnblogs.com/foxy/p/7659856.html
Copyright © 2011-2022 走看看