android--旋轉螢幕方法總結

來源:互聯網
上載者:User

標籤:

在介紹之前,我們需要先瞭解預設情況下android旋轉螢幕的機制:預設情況下,當使用者手機的重力感應器開啟後,旋轉螢幕方向,會導致當前activity發生onDestroy-> onCreate,這樣會重新構造當前activity和介面布局,如果在Camera介面,則表現為卡頓或者黑屏一段時間。如果是在橫豎屏UI設計方面,那麼想很好地支援旋轉螢幕,則建議在res中建立layout-land和layout-port兩個檔案夾,把橫屏和豎屏的布局檔案分別放入對應的layout檔案夾中。瞭解了這些以後,我們對android的旋轉螢幕方法進行如下總結:1,AndroidManifest.xml設定如果單單想設定橫屏或者豎屏,那麼只需要添加橫豎屏代碼:android:screenOrientation=”landscape”橫屏設定;android:screenOrientation=”portrait”豎屏設定;這種方法的優點:即使旋轉螢幕,Activity也不會重新onCreate。缺點:螢幕只有一個方向。2,代碼動態設定如果你需要動態改變橫豎屏設定,那麼,只需要在代碼中調用setRequestedOrientation()函數:setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);//橫屏設定setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);//豎屏設定setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);//預設設定這種方法優點:可以隨意動態設定,滿足我們人為改變橫豎屏的要求,同時滿足橫豎屏UI不同的設計需求;缺點:如果改變設定,那麼,Activity會被銷毀,重新構建,即重新onCreate;3,重寫onConfigurationChanged如果你不希望旋轉螢幕的時候Activity被不斷的onCreate(這種情況往往會造成螢幕切換時的卡頓),那麼,可以使用此方法:首先,在AndroidMainfest.xml中添加configChanges:</activity>注意,keyboardHidden表示鍵盤協助工具功能隱藏,如果你的開發API等級等於或高於13,還需要設定screenSize,因為screenSize會在旋轉螢幕時改變;?1android:configChanges="keyboardHidden|orientation|screenSize"然後,在Activity中重寫onConfigurationChanged方法,這個方法將會在旋轉螢幕變化時,進行監聽處理:?<pre class="java" name="code">public void onConfigurationChanged(Configuration newConfig) {        // TODO Auto-generated method stubsuper.onConfigurationChanged(newConfig);        if (newConfig.orientation==Configuration.ORIENTATION_LANDSCAPE) {           // Nothing need to be done here                   } else {           // Nothing need to be done here        }                   } </pre><pre class="brush:java;"></pre> 這個方法的優點:我們可以隨時監聽旋轉螢幕變化,並對應做出相應的操作;缺點:它只能一次旋轉90度,如果一下子旋轉180度,onConfigurationChanged函數不會被調用。4,結合OrientationEventListener,自訂旋轉監聽設定如果你想更加完美,更加完全的掌控監聽旋轉螢幕變化,比如,轉屏時不想重新onCreate,尤其是在Camera介面,不想出現旋轉preview時螢幕的卡頓、黑屏等問題,那麼,可以嘗試:  首先,建立OrientationEventListener對象:<pre class="brush:java;">private OrientationEventListener mOrientationListener; // screen orientation listener</pre><pre class="brush:java;">private boolean mScreenProtrait = true;private boolean mCurrentOrient = false;</pre>然後,自訂螢幕變化回調介面<br><pre class="brush:java;">abstract protected void OrientationChanged(int orientation);//screen orientation change event</pre>最後,自訂監聽類<br><pre class="brush:java;">private final void startOrientationChangeListener() {        mOrientationListener = new OrientationEventListener(this) {            @Override            public void onOrientationChanged(int rotation) {                if (((rotation >= 0) && (rotation <= 45)) || (rotation >= 315)||((rotation>=135)&&(rotation<=225))) {//portrait                 mCurrentOrient = true;                 if(mCurrentOrient!=mScreenProtrait)                 {                  mScreenProtrait = mCurrentOrient;                  OrientationChanged(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);                  Log.d(TAG, "Screen orientation changed from Landscape to Portrait!");                 }                }                else if (((rotation > 45) && (rotation < 135))||((rotation>225)&&(rotation<315))) {//landscape                 mCurrentOrient = false;                 if(mCurrentOrient!=mScreenProtrait)                 {                  mScreenProtrait = mCurrentOrient;                  OrientationChanged(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);                  Log.d(TAG, "Screen orientation changed from Portrait to Landscape!");                 }                }            }        };        mOrientationListener.enable();    }</pre>在onCreate()中調用:<pre class="brush:java;">startOrientationChangeListener();  </pre>這個方法的優點:你可以任意隨時準確的監聽旋轉螢幕變化的狀態,可以隨時動態改變橫豎屏狀態;註:對於Camera來說,你可以設定初始化為橫屏或者豎屏,然後對外提供旋轉監聽,這樣,既可以獲得旋轉螢幕狀態,讓你做出相應的操作,又不會出現重新onCreate當前Activity造成的卡頓與短暫的黑屏切換。<br>  <br>  <p> </p><p> </p>                        

  

android--旋轉螢幕方法總結

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.