Android實現(xiàn)屏幕旋轉方法總結
本文實例總結了Android實現(xiàn)屏幕旋轉方法。分享給大家供大家參考。具體如下:
在介紹之前,我們需要先了解默認情況下android屏幕旋轉的機制:
默認情況下,當用戶手機的重力感應器打開后,旋轉屏幕方向,會導致當前activity發(fā)生onDestroy-> onCreate,這樣會重新構造當前activity和界面布局,如果在Camera界面,則表現(xiàn)為卡頓或者黑屏一段時間。如果是在橫豎屏UI設計方面,那么想很好地支持屏幕旋轉,則建議在res中建立layout-land和layout-port兩個文件夾,把橫屏和豎屏的布局文件分別放入對應的layout文件夾中。
了解了這些以后,我們對android的屏幕旋轉方法進行如下總結:
1. AndroidManifest.xml設置
如果單單想設置橫屏或者豎屏,那么只需要添加橫豎屏代碼:
android:screenOrientation="landscape"橫屏設置; android:screenOrientation="portrait"豎屏設置;
這種方法的優(yōu)點:即使屏幕旋轉,Activity也不會重新onCreate。
缺點:屏幕只有一個方向。
2. 代碼動態(tài)設置
如果你需要動態(tài)改變橫豎屏設置,那么,只需要在代碼中調用setRequestedOrientation()函數(shù):
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); //橫屏設置 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); //豎屏設置 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); //默認設置
這種方法優(yōu)點:可以隨意動態(tài)設置,滿足我們人為改變橫豎屏的要求,同時滿足橫豎屏UI不同的設計需求;
缺點:如果改變設置,那么,Activity會被銷毀,重新構建,即重新onCreate;
3. 重寫onConfigurationChanged
如果你不希望旋轉屏幕的時候Activity被不斷的onCreate(這種情況往往會造成屏幕切換時的卡頓),那么,可以使用此方法:
首先,在AndroidMainfest.xml中添加configChanges:
<activity android:name=".Test" android:configChanges="orientation|keyboard"> </activity>
注意,keyboardHidden表示鍵盤輔助功能隱藏,如果你的開發(fā)API等級等于或高于13,還需要設置screenSize,因為screenSize會在屏幕旋轉時改變;
android:configChanges="keyboardHidden|orientation|screenSize"
然后,在Activity中重寫onConfigurationChanged方法,這個方法將會在屏幕旋轉變化時,進行監(jiān)聽處理:
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 } }
這個方法的優(yōu)點:我們可以隨時監(jiān)聽屏幕旋轉變化,并對應做出相應的操作;
缺點:它只能一次旋轉90度,如果一下子旋轉180度,onConfigurationChanged函數(shù)不會被調用。
4. 結合OrientationEventListener,自定義旋轉監(jiān)聽設置
如果你想更加完美,更加完全的掌控監(jiān)聽屏幕旋轉變化,比如,轉屏時不想重新onCreate,尤其是在Camera界面,不想出現(xiàn)旋轉preview時屏幕的卡頓、黑屏等問題,那么,可以嘗試:
首先,創(chuàng)建OrientationEventListener對象:
private OrientationEventListener mOrientationListener; // screen orientation listener private boolean mScreenProtrait = true; private boolean mCurrentOrient = false;
然后,自定義屏幕變化回調接口
abstract protected void OrientationChanged(int orientation); //screen orientation change event
最后,自定義監(jiān)聽類
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(); }
在onCreate()中調用:
startOrientationChangeListener();
這個方法的優(yōu)點:你可以任意隨時準確的監(jiān)聽屏幕旋轉變化的狀態(tài),可以隨時動態(tài)改變橫豎屏狀態(tài);
注:對于Camera來說,你可以設置初始化為橫屏或者豎屏,然后對外提供旋轉監(jiān)聽,這樣,既可以獲得屏幕旋轉狀態(tài),讓你做出相應的操作,又不會出現(xiàn)重新onCreate當前Activity造成的卡頓與短暫的黑屏切換。
希望本文所述對大家的Android程序設計有所幫助。
相關文章
Android自定義View繪制貝塞爾曲線實現(xiàn)流程
貝塞爾曲線的本質是通過數(shù)學計算的公式來繪制平滑的曲線,分為一階,二階,三階及多階。但是這里不講數(shù)學公式和驗證,那些偉大的數(shù)學家已經(jīng)證明過了,所以就只講講Android開發(fā)中的運用吧2022-11-11Android 使用fast-verification實現(xiàn)驗證碼填寫功能的實例代碼
這篇文章主要介紹了Android 使用fast-verification實現(xiàn)驗證碼填寫功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-04-04Android統(tǒng)一處理登錄后攜帶數(shù)據(jù)跳轉到目標頁面的方式
我們在開發(fā)的時候,一定會遇到頁面跳轉,下面這篇文章主要給大家介紹了關于Android統(tǒng)一處理登錄后攜帶數(shù)據(jù)跳轉到目標頁面的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2023-06-06Android中的SpannableString與SpannableStringBuilder詳解
這篇文章主要給大家介紹了關于Android中SpannableString與SpannableStringBuilder的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。2017-10-10Android ToolBar 修改邊距的實現(xiàn)方法
這篇文章主要介紹了Android ToolBar 修改邊距的實現(xiàn)方法的相關資料,通過此文希望能幫助到大家,需要的朋友可以參考下2017-08-08