android屏幕旋轉切換控件布局及數據的暫存


首先如何實現豎屏和橫屏下不同的控件布局

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是否為空,對數據進行復原顯示,不過這種方式只是暫時的保存了歷史數據,不過應用到屏幕旋轉中也能解決數據丟失的問題。

 

 

 

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM