Android 禁止屏幕旋轉 & 旋轉屏幕時保持Activity內容


Android 禁止屏幕旋轉 & 旋轉屏幕時保持Activity內容

 
1.在應用中固定屏幕方向。
 
     在AndroidManifest.xml的activity中加入:
            android:screenOrientation=”landscape”
     屬性即可(landscape是橫向,portrait是縱向)。
 
OK
 
 

2.隨屏幕旋轉時,不重新調用onCreate。

 

當將手機屏幕旋轉時,系統會被強制重置啟動onCreate方法

 
1)修改AndroidManifest.xml
 
     在activity屬性中加入:
          android:configChanges=”orientation|keyboardHidden”
  • android:configChanges,這個方法主要是負責列出清單,當清單上用戶指定的設置改變時,Activity會自己處理這些變化。
  • orientation,屏幕界面旋轉(可能是用戶手動旋轉的),【注意:如果你的開發API等級等於或高於13,你還需要設置screenSize,因為screenSize會在屏幕旋轉時改變】
  • keyboardHidden,鍵盤輔助功能改變
2) 在相對應的Activity中繼承重寫onConfigurationChanged方法,這個方法將會在我們的應用發生變化時,讓我們能隨心所謂地進行監聽處理。
 
public void onConfigurationChanged(Configuration newConfig) {
// TODO Auto-generated method stub
super.onConfigurationChanged(newConfig);
if (newConfig.orientation==Configuration.ORIENTATION_LANDSCAPE) {
// Nothing need to be done here

} else {
// Nothing need to be done here
}


}
還有界面設計方面的問題,Android手機大部分是HVGA、WVGA的分辨率,屏幕視覺上比較“狹長”。往往豎着看很合適的布局,當屏幕橫向翻轉以后 顯示會變得很別扭。當屏幕由豎直方向改變為橫向時,我們可以把界面中的控件由本來的垂直線性布局修改為橫向線性布局,這樣布局會更合理一些。我們可以自己 寫一個布局類集成LinearLayout布局,通過覆蓋onMeasure方法來實現這種自動布局。當屏幕的寬高發生改變時,系統會調用 onMeasure方法。通過這個方法,我們可以獲得改變以后的寬高尺寸,從而來實現屏幕翻轉的自動布局,主要代碼如下:


Java代碼 
 /**  
  * 屏幕改變時自動調用  
* @param widthMeasureSpec 改變后的寬度  
* @param heightMeasureSpec 改變后的高度  
*/  
 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)   
 {   
     /*寬度*/  
     int screenWith = View.MeasureSpec.getSize(widthMeasureSpec);   
     /*高度*/  
     int screenHeight = View.MeasureSpec.getSize(heightMeasureSpec);   
        
     /*豎直布局*/  
     if (screenWith < screenHeight)   
     {   
            
         this.setOrientation(VERTICAL);   
         for (int i = 0; i < getChildCount(); i++)   
         {   
             View childView = getChildAt(i);   
             if (childView instanceof CakyCanvas)   
             {   
                 /*該控件占布局的2/5*/  
                 LayoutParams params = new LayoutParams(screenWith,   
                         screenHeight * 2/ 5  
                 updateViewLayout(childView, params);   
             }   
             else if (childView instanceof CakyExplainCanvas)   
             {   
                 /*該控件占布局的3/5*/  
                 LayoutParams params = new LayoutParams(screenWith,   
                         screenHeight * 3/ 5  
                 updateViewLayout(childView, params);   
             }   
         }   
     }   
     /*橫向布局*/  
     else  
     {   
            
         this.setOrientation(HORIZONTAL);   
         for (int i = 0; i < getChildCount(); i++)   
         {   
             View childView = getChildAt(i);   
             if (childView instanceof CakyCanvas)   
             {   
                 LayoutParams params = new LayoutParams(   
                         screenWith * 2/ 5  
                         screenHeight);   
                 updateViewLayout(childView, params);   
             }   
             else if (childView instanceof CakyExplainCanvas)   
             {   
                 LayoutParams params = new LayoutParams(   
                         screenWith * 3/ 5  
                         screenHeight);   
                 updateViewLayout(childView, params);   
             }   
         }   
     }   
     super.onMeasure(widthMeasureSpec, heightMeasureSpec);   
 } 

 


免責聲明!

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



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