首先如何實現豎屏和橫屏下不同的控件布局
1、在activity_main.xml文件的布局窗口找到create landscape variation,就是創建另一個橫屏的布局文件

2、在工程目錄看到多了一個activity_main.xml文件,在這里進行橫屏情況下的控件布局

3、如下圖所示為兩種布局,按鍵分別是三行兩列,兩行三列分布

4、監聽button1,按下按鈕1后將上方的Textview顯示由welcome變為button1,並重寫ondestroy函數,調用destroy函數時打印相關信息
測試 屏幕旋轉時 Textview顯示的變化以及destroyed在何時會被調用

從左至右依此是開始界面->按下button1后顯示界面->旋轉后界面
測試發現每次旋轉屏幕,都會調用一次destroy函數,說明旋轉屏幕會導致程序的銷毀,再重新開始一個新的程序,這也就意味着旋轉后界面上的顯示信息無法得到保存,所以圖二到圖三可以看到Textview的顯示內容由button1變為了welcome就是這個原因。
5、如何保證在旋轉屏幕后顯示界面的信息依舊不改變?
if(savedInstanceState!=null) //需要先判斷是否為空,不為空代表有歷史數據保存需要進行數據復原,否則會引起空指針異常 { String s=savedInstanceState.getString("key"); //savedInstanceState存放的Bundle信息實際就是從outState而來 textView.setText(s); } button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { textView.setText(R.string.button1); } }); } @Override //不過這種方式保存數據只是臨時保存,無法永久保存 protected void onSaveInstanceState(@NonNull Bundle outState) { //該函數用於提取出歷史數據,保存到outState中 super.onSaveInstanceState(outState); outState.putString("key",textView.getText().toString());//將textview中的內容存放在鍵值為KEY的字符串中,最終會存為一個Bundle }
調用onSaveInstanceState函數,可以暫時保存要保持的歷史數據,在程序運行后判斷savedInstanceState是否為空,對數據進行復原顯示,不過這種方式只是暫時的保存了歷史數據,不過應用到屏幕旋轉中也能解決數據丟失的問題。

這樣旋轉屏幕后數據依舊不會改變。
