如題所問,我最近遇到一個bug,就是設置了搖感,然后有用戶反饋說設置了手機下拉的系統設置-屏幕旋轉-關閉。然后屏幕還是會旋轉的問題。
首先,我們先從如何設置橫豎屏了解下好了
設置橫屏和豎屏的方法:
方法一:在AndroidManifest.xml中配置
如果不想讓軟件在橫豎屏之間切換,最簡單的辦法就是在項目的AndroidManifest.xml中找到你所指定的activity中加上android:screenOrientation屬性,他有以下幾個參數:
"unspecified":默認值 由系統來判斷顯示方向.判定的策略是和設備相關的,所以不同的設備會有不同的顯示方向.
"landscape":橫屏顯示(寬比高要長)
"portrait":豎屏顯示(高比寬要長)
"user":用戶當前首選的方向
"behind":和該Activity下面的那個Activity的方向一致(在Activity堆棧中的)
"sensor":有物理的感應器來決定。如果用戶旋轉設備這屏幕會橫豎屏切換。
"nosensor":忽略物理感應器,這樣就不會隨著用戶旋轉設備而更改了("unspecified"設置除外)。
方法二:在java代碼中設置
設置橫屏代碼:setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);//橫屏
設置豎屏代碼:setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);//豎屏?
因為橫屏有兩個方向的橫法,而這個設置橫屏的語句,如果不是默認的橫屏方向,會把已經橫屏的屏幕旋轉180°。
所以可以先判斷是否已經為橫屏了,如果不是再旋轉,不會讓用戶覺得轉的莫名其妙啦!代碼如下:
if(this.getResources().getConfiguration().orientation==Configuration.ORIENTATION_PORTRAIT){setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
是吧,設置的無非就這兩種方法。但是搜索的方法千篇一律都是差不多的。然后我設置的是"sensor"。然后也不懂問題出在了哪里,沒辦法只能繼續去找資料看看。或許有更多的可能性沒考慮到,結果在一篇文章中找到了。
原來就是方向傳感器決定的,它沒辦法隨系統設置的旋轉。優先級比較高吧。吐了呀!然后我就直接把清單文件的?android:screenOrientation 屬性刪了。用默認的屬性或者改成?android:screenOrientation="unspecified" 。問題就解決了。
當然了還有標題出現的這個問題,就是設置豎屏仍然跟隨屏幕旋轉,可能需要你細心的找找你設置的方法一或者方法二哪一步設置錯了。或者代碼設置錯了。畢竟慢工出細活,要細心才不容易出錯。
嗯嗯,還有就是遇到了個問題:如何判斷是否開啟自動旋轉。下面就來分享一下方法:系統是否允許自動旋轉屏幕的方法
/*** 系統是否允許自動旋轉屏幕*/public static boolean isAutoRotateOn(Context context) {//獲取系統是否允許自動旋轉屏幕return (android.provider.Settings.System.getInt(context.getContentResolver(), Settings.System.ACCELEROMETER_ROTATION, 0) == 1);}
之前有查閱的如下:
Activity手動設置橫豎屏展示之后繼續保持橫豎屏自動切換 - 簡書
安卓 屏幕旋轉 - 自由資訊
android設置橫屏和豎屏的方法-騰訊云開發者社區-騰訊云