Android学习笔记(三七):再谈屏幕切换
来源:互联网 发布:比特精灵 mac 编辑:程序博客网 时间:2024/04/28 09:47
切换需注意数据保存和恢复
在Android学习笔记(三六):横屏竖屏的切换中,我们配置了两个layout,一个用户普通的portrait,一个用户landsapce方式。如果只有一个layout,我们沿用上一个例子,删除了在layout-land/中的xml文件,则在屏幕切换时,会按照原来的排版,适配新的屏幕。程序我进行了简化,每按一次pick,就加一,用此来跟踪是否需要进行数据保存和恢复,如下:
- public class Chapter19Test3 extends Activity{
- private Button pickButton = null;
- private int count = 0;
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setupViews();
- }
- private void setupViews(){
- setContentView(R.layout.chapter_19_test1);
- pickButton = (Button)findViewById(R.id.c19_pick);
- pickButton.setText("Pick " + count);
- pickButton.setOnClickListener(new View.OnClickListener() {
- public void onClick(View v) {
- count ++;
- pickButton.setText("Pick " + count);
- }
- });
- }
- }
关于如何数据保存和恢复,见Android学习笔记(三六):横屏竖屏的切换 。
不进行屏幕切换
由于某些原因,例如游戏,在切换屏幕的过程中,由于动作慢导致游戏失败,我们希望不触发屏幕切换。我们在AndroidManifest.xml中在activity进行设置:
<activity android:name=".xxxxx" ...... android:screenOrientation="portrait" />
即使我们在layout-land/补充了相关的layout的xml,也不会触发横屏和竖屏的布局的转换。
需要注意的是,我们跟踪发现,切换也同样会导致destroy->re-create,也就是需要进行数据的保存和恢复。由于Android的硬件设备类型很多,有些是通过smartkey,有些是通过物理键盘的打开,而在模拟器中就是“CTRL+F12”来强制进行屏幕切换。如果我们需要和iPhone那样有定位陀螺仪来触发屏幕的切换,我们只需在AndroidManifest.xml中<activity android:name=".xxxxx" ...... android:screenOrientation="sensor" />即可。
自己控制旋转
我们如果希望自己控制屏幕选择,在收到相关的屏幕旋转的事件后,由程序自行控制处理,而不是系统自动处理。可以通过以下步骤:
一、在AndroidManifest.xml中的activity,增加android:configChanges属性,表示我们需要自行控制这些处理
- <activity android:name=".xxx" ... android:configChanges="keyboardHidden|orientation" />
有一点比较奇特的就是,如果我们只设置orientation或者keyboardHidden,会有一些奇怪的现象,可能只出现在模拟器,因为CTRL+F12是模拟器的键盘操作。不确定实际设备会否如此。模拟器切换触发了key和orientation两个事件,我们现默认这种情况。
二、在程序中通过onConfigurationChanged()获得相关的事件并进行处理。
在切换的时候,系统,通过onConfigurationChanged()包括事件,系统将不会自行去处理界面,也就是不会因为重新描绘画面而对activity进行destroy和re-create,也就是最重要的,不会导致数据的重初始化而导致需对数据进行保存和恢复,仅此也是一种比较便捷的处理方式。
- public void onConfigurationChanged(Configuration newConfig) {
- super.onConfigurationChanged(newConfig);
- setupViews();
- }
一般而且,我们可以通过newConfig来排断但前的状态,例如用switch(newConfig.orientation)来判断当前方向,而判断如何处理,在这个例子中,简单地重绘UI就可以了。
- Android学习笔记(三七):再谈屏幕切换
- Android学习笔记(三七):再谈屏幕切换
- Android学习笔记之滑动翻页(屏幕切换)
- Android学习笔记之滑动翻页(屏幕切换)
- Android学习笔记之滑动翻页(屏幕切换)
- Pro Android学习笔记(三七):Fragment(2):基础小例子
- Pro Android学习笔记(一三七):Home Screen Widgets(3):配置Activity
- Android笔记横竖屏幕切换
- Java for Web学习笔记(三七):自定义tag(5)自定义tld文件
- am架构学习笔记(二) 屏幕切换
- android横竖屏幕切换(转载)
- Android 屏幕设定(横屏,竖屏,切换)
- Android横竖屏幕切换详解(完整版)
- android-横向屏幕切换
- android ViewFlipper屏幕切换
- Android屏幕切换
- android ViewFlipper屏幕切换
- Android屏幕切换
- Objective-C IMP使用
- Hello World——第一个EJB项目搭建
- Android学习笔记(三六):横屏竖屏的切换
- IAR6.4编译6.2以前版本的问题
- 输入/输出流---打开,读写文件操作
- Android学习笔记(三七):再谈屏幕切换
- ASP.NET mvc3.0 入手学习资料
- Android学习笔记(三八):资源resource(上)、XML解析(XmlPullParser)
- HTML5实现摇一摇的功能(实测后)
- 指针数组再理解
- IT外企那点儿事(12):也说跳槽
- Android学习笔记(三九):资源resource(下)
- 数组输出
- 图片和文字垂直居中的方法