zoukankan      html  css  js  c++  java
  • 《Android编程权威指南》读书笔记(七) 处理旋转设备

    《Android编程权威指南》-读书笔记(七)

    -处理旋转设备

    旋转设备会改变设备配置(device configuration)。设备配置是用来描述设备当前状态的一系列特征。这些特征包括:屏幕的方向、屏幕的密度、屏幕的尺寸、键盘类型、底座模式以及语言,等等。

    通常,为匹配不同的设备配置,应用会提供不同的备选资源。比如说不同的图标资源,全新的布局文件。

    在运行时配置变更(runtime configuration change)发生时,很拗口,就是可以自动加载新的资源文件,新的布局文件的意思。

    本章目标:

    • 创建水平模式布局
    • 设备旋转前保存数据

    在上一章中http://www.cnblogs.com/canglin/p/4357585.html 我们使用Log分析了activity的生命周期,并且发现了旋转设备后,实际上是重新构造了一遍activity。在本章中,将会利用此特性在旋转后,选择新的图片资源以及布局结构。

    创建水平模式布局

    我们首先创建一个适合在旋转后显示的布局。

    旋转后的layout文件在res/layout-land下,创建方法是右键layout->New->Layout resource file

    文件名还是activity_quiz,目录名称改为layout-land。Root slement 我这里设置为了FrameLayout这里其实填写什么都没有关系,到了文件里面可以随时改,因为这个是旋转后的主要的控件变化不大,大可以从原来的文件中吧代码复制过来,然后在吧LinearLayout改成FrameLayout。点击确认后,文件显示为如下:

    我是从Visual studio转过来的,这样的文件结构妥妥了看了半天才弄明白。

    Layout-land是不会显示在文件结构里的。只是以文件activity_quiz(land)的形式显示了出来。这一点与Visual studio是有很大的不同的。

    FrameLayout是一种最简单的ViewGroup组件,它不以特定方式安排其子视图的位置。FrameLayout子视图的位置排列都是由它们各自的android:layout_gravity属性决定的。

    大概的样子如上图所示。App/src/mian/res/layout-land/activity_quiz.xml的代码如下:

    http://git.oschina.net/canglin/GeoQuiz/commit/7df94925c856b155b9cddcaed5af097d7a605d55

    设备旋转前保存数据

    运行刚才的应用后,发现问题会回到初始状态。也就是没有保存程序的运行数据。现在把数据保存起来。

    通过覆盖onSaveInstanceState()方法,将一些数据保存在Bundle中,然后在onCreate()方法中取回这些数据。在本例中通过重写onSaveInstanceState()方法将mCurrentIndex变量的值存到KEY_INDEX常量所定义的键值里。在onCreate(Bundle savedInstanceState)方法中,我们这样来获取mCurrentIndex的值

    if(savedInstanceState != null) {

    mCurrentIndex = savedInstanceState.getInt(KEY_INDEX,mCurrentIndex);

    }

    通过重写onSaveInstanceState()来写入值

    @Override

    public void onSaveInstanceState(Bundle savedInstanceState) {

    super.onSaveInstanceState(savedInstanceState);

    Log.i(TAG,"onSaveInstanceState");

    savedInstanceState.putint(KEY_INDEX,mCurrentIndex);

    }

    代码如下:

    http://git.oschina.net/canglin/GeoQuiz/commit/34b65ab4f15ac39611edc025030eeee4a362accb

  • 相关阅读:
    URL传参数导致乱码
    [转载]HTTP协议详解
    https中关于密码学的基础概念
    JavaScript高级程序设计 第四章 变量、作用域和内存问题
    JavaScript高级程序设计 第三章 基本概念
    实现sticky footer的五种方法
    css grid学习材料整理
    ASP.NET MVC编程——视图
    Entity Framework——配置文件设置
    Entity Framework——记录执行的命令信息
  • 原文地址:https://www.cnblogs.com/canglin/p/4358067.html
Copyright © 2011-2022 走看看