一、横竖屏切换
1、加载布局
横竖屏切换是系统默认调用不同状态下的横竖布局
根据横竖屏切换时所需要的不同布局,建立如①
①、在project视图下,建立布局文件 -land 横向 -port 纵向
系统会根据屏幕横竖自动调用对应的视图
返回Android视图
②、xml属性–横竖屏切换:
在AndroidManifest.xml中找到指定的Activity,加上 android:screenOrientation=””
参数如下:
“unspecified”:默认值 由系统来判断显示方向.判定的策略是和设备相关的,所以不同的设备会有不同的显示方向.
“landscape”:横屏显示(宽比高要长) 不会切换竖屏
“portrait”:竖屏显示(高比宽要长) 不会切换横屏
“user”:用户当前首选的方向
“behind”:和该Activity下面的那个Activity的方向一致(在Activity堆栈中的)
“sensor”:有物理的感应器来决定。如果用户旋转设备这屏幕会横竖屏切换。
“nosensor”:忽略物理感应器,这样就不会随着用户旋转设备而更改了(”unspecified”设置除外)。
如
③、java–横竖屏切换
1、通过setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)来设置
SCREEN_ORIENTATION_LANDSCAPE 横屏
SCREEN_ORIENTATION_PORTRAIT 竖屏
如
2、通过 Configuration.ORIENTATION_LANDSCAPE==this.getResources().getConfiguration().orientation来判断当前是横屏还是竖屏然后来加载相应的 xml布局文件。
因为当屏幕变为横屏的时候,系统会重新呼叫当前Activity的onCreate方法,你可以把以下方法放在你的onCreate中来检查当前的方向,然后可以让你的setContentView来载入不同的layout xml.
如:
通过onCreate 加载创建切换
通过按钮点击切换
竖:
切换后:
2、保存数据
覆写生命周期方法、通过点击切换横竖屏幕
在切换时会发现,执行如下周期 竖—>横
既然是新创建的Activity,所以之前Activity存的数据将不会存在操作数据
保存和取出数据的监听
解决1: 仅保存UI视图的数据
将两个布局文件中的EditText 设置相同的 id
横竖切换后
切换后EditText 的内容仍然存在被保存,但是存放在mdata的数据不存在。
原因在于新的activity创建
解决2:UI监听—保存UI数据以及内部存储的数据
新的activity触发了改变监听,并将改变的文本重新赋值给内部存储,所以能获取
解决3:onStop() onStart() 存储—保存UI数据以及内部存储的数据
①、创建static修饰的Map集合,用来存放数据
②、在onStop中 将数据存入Map—即在第一个Activity销毁前,存储数据
③、在onStart中 将数据取出—即在第二个Activity加载时取出数据
以上的三种方法均是销毁之前的Activity、创建和加载新的Activity。在此过程中进行数据保存的操作
解决4: android:configChanges 机制
不让Activity会destroy掉,当然也不create一个新的出来
android:configChanges=”keyboard|orientation|screenSize”
①、在AndroidManifest.xml中添加 android:configChanges 属性,参数为”keyboard|orientation|screenSize“
②、java中覆写方法
执行的周期如下
竖屏:
切换横屏后:
可以看出,解决4 的机制在于重新加载视图,而不是重新创建Activity
二、传感器
安装在手机中的各种与外界物理因素交互的硬件,如 重力传感器、光线传感器、加速度传感器、方向传感器等等。。。。
传感器的使用:
传感器是Android直接控制的资源,所以与Notification相同需要系统服务的支持
相似点:都是动过该管理器获取
Notification:
Sensor:
获取到管理器后,可以获取本机所有的感应器:
测试机中的所有传感器
熟悉传感器后可以根据传感器的特性,进行不同的操作
扩展:摇一摇的实现 (加速度传感器 ACCELERONETER)
①、搭建布局界面—-测试 真实机 截图 虚拟机
在xml还有ImageView 为隐藏状态
②、java
在注册监听的第3个参数为精确度—>该传感器以怎样的频率触发监听(由慢到快)
SENSOR_DELAY_NORMAL —–正常频率
SENSOR_DELAY_UI —–UI频率
SENSOR_DELAY_GAME —–游戏频率
SENSOR_DELAY_FASTEST —–最快的频率
设置该项是为了确定监听中以多大的频率(多大的延时)来获取一次数据–>越快代表获取传感器参数的次数就越多
监听及方法:
x、y、z的参数打印如下
不断变化–变化的频率为 监听中的精确度
动画:
要注意此为属性动画—>即使监听中停止了该动画,但是其属性仍有一定的旋转角度
按钮监听:
实现效果
一直在左右30°摇摆
当真实机摇晃到指定参数的加速度后–tv隐藏 imgv显示
再要一次