《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
?
轉載于:https://www.cnblogs.com/canglin/p/4358067.html
總結
以上是生活随笔為你收集整理的《Android编程权威指南》-读书笔记(七) -处理旋转设备的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【专栏必读】王道考研408计算机组成原理
- 下一篇: MYSQL查询语句优化