zoukankan      html  css  js  c++  java
  • Android 开发学习进程0.33 横竖屏切换

    安卓横竖屏大多数已经在manifest文件中将activity使用android:screenOrientation="portrait"属性写死,如简单的界面切换可直接更改为"sensor"属性,但如复杂的界面需使用其他方法。

    1监听横竖屏切换变化

            <activity android:name=".MainActivity"
                android:configChanges="orientation|keyboard|layoutDirection|screenSize">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
    

    以下是manifest文件中的配置,设置configchanges属性是为了重写设置切换监听方法,设置为orientation或orientation|keyboardHidden或不设置时,生命周期均会执行一次,设置android:configChanges="orientation|keyboardHidden|screenSize"android:configChanges="orientation|keyboardHidden|screenSize" 不重新走生命周期方法仅执行onConfigurationChanged方法,注意这个改变实在api 13开始的。而之前版本已经很少使用,不再详述。
    代码中切换横竖屏的方法为 Activity.this.setRequestedOrientation 在设置后还需要setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR)方法恢复,这是由于设置方法相当于manifest文件设置,使用后就不会重力感应改变方向。如果不重走生命周期可以使用下方法
    切换布局。

        @Override
        public void onConfigurationChanged(Configuration newConfig) {
            super.onConfigurationChanged(newConfig);
            if(newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE){
                Toast.makeText(getApplicationContext(), "横屏", Toast.LENGTH_SHORT).show();
           //切换到横屏  
          //修改布局文件  
          setContentView(R.layout.activity_main);  
          //findViewById ....   
            }else{
                Toast.makeText(getApplicationContext(), "竖屏", Toast.LENGTH_SHORT).show();
            }
        }
    

    如果使用重走生命周期,可能遇到保存当前状态的问题。重写activity的onSaveInstanceState方法保存数据,数据以bundle形式保存,先将数据保存在方法形参中再执行super父方法。
    保存后使用onRestoreInstanceState方法取出数据,在onCreate方法中可以取出保存的数据。
    如果在资源文件夹多添加layout-land可以创建同名的布局文件,在横竖屏切换的过程中自动显示正确UI。

    吾生也有涯,而知也無涯。以有涯隨無涯,殆已
  • 相关阅读:
    窗体吸附 Timer + 判断Location (简单实用)
    C# FTP 应用程序
    C# 加密方法汇总
    LINQ 标准的查询操作符 合计操作符 Count()、Sum()、Min()、Max()、Average()和Aggregate()
    委托中的协变和逆变(C# 编程指南)
    深入探讨C#序列化和反序列化
    grep 命令详解
    Oracle 数据库的启动和关闭的方式!
    linux 下的光盘拷贝
    C3P0连接池配置
  • 原文地址:https://www.cnblogs.com/baimiyishu/p/15118189.html
Copyright © 2011-2022 走看看