前段時間做個項目是 Android 集成Unity的,混合開發。測試沒問題,發佈出去了。
但是突然收到消息說崩潰了。沒辦法,看唄。然後查看平板設備,發現是8.0系統問題
它不讓透明的頁面申請屏幕變換。即setRequestedOrientation(......)
這個請求我寫在了BaseActivity裏,沒辦法只能去掉了,然後我將除透明activity外的頁面在清單頁面中寫上橫屏
android:screenOrientation="landscape"
然後運行,嗯?沒成功?然後我單獨起個demo來看看,這不沒問題嗎。坑我。
我停止下來,仔細想了想,發現問題所在是Unity的問題導致。試驗把unity效果註釋掉,確實正確了。
附:我的項目是Unity導出android項目,然後放到Android Studio中編譯成aar,放到自己的android項目中。
我就去Unity中修改了導出橫豎屏設置。(unity/android都是自己開發,所以清門熟路)
這個屏幕方向有幾個選擇
- Portrait:豎屏
- Portrait Upside Down:豎屏,手機倒過來
- Landscape Right:橫屏,屏幕在home鍵右邊
- Landscape Left:橫屏,屏幕在home鍵左邊(比較常用,我選擇的也是這個)
- Auto Rotation:自動旋轉屏幕
- Auto Rotation有額外選項,可以只勾選某些方向,根據個人需求來指定旋轉方向。
然後重新編譯了一次,運行沒問題,有3D的界面不自動變了。Android 8.0系統也沒事了。
回憶一下
- 透明Activity取消申請屏幕旋轉的代碼,對不透明的頁面設置。
- Unity項目導出的時候設置屏幕方向
- 成功
忘記在哪看到的一句話了, 透明Activity的屏幕方向跟隨下面那個不透明activity的方向。所以只要保證跳轉透明頁面的activity的屏幕方向正確即可。
附贈 Android的屏幕方向列表:
參數 | 值 | 功能 | 自動旋轉打開 | 自動旋轉關閉 |
---|---|---|---|---|
unspecified |
-1 | 讓系統決定Activity的方向,由傳感器和系統設置共同決定 | 四個方向 | 不旋轉 |
landscape |
0 | 強制爲橫屏,忽略傳感器和系統設置 | 不旋轉 | 不旋轉 |
portrait |
1 | 強制爲豎屏,忽略傳感器和系統設置 | 不旋轉 | 不旋轉 |
user |
2 | 使用用戶當前的首選方向 | 四個方向 | 不旋轉 |
behind |
3 | 與Activity堆下的Activity方向相同 | 四個方向 | 不旋轉 |
sensor |
4 | 根據傳感器來決定方向,忽略系統設置 | 四個方向 | 四個方向 |
nosensor |
5 | 忽略系統設置,忽略傳感器 | 不旋轉 | 不旋轉 |
sensorLandscape |
6 | 默認使用橫屏,忽略系統設置,但是可以響應傳感器的操作 | 橫屏的兩個方向 | 橫屏的兩個方向 |
sensorPortrait |
7 | 默認使用豎屏,忽略系統設置,但是可以響應傳感器的操作 | 豎屏兩個方向 | 豎屏兩個方向 |
reverseLandscape |
8 | 默認使用橫屏,與默認橫屏翻轉180度的方向 | 只能使用翻轉的橫屏 | 只能使用翻轉的橫屏 |
reversePortrait |
9 | 默認使用豎屏,與默認豎屏翻轉180度的方向 | 只能使用翻轉的豎屏方向 | 只能使用翻轉的豎屏方向 |
fullSensor |
10 | 由傳感器決定,能旋轉爲任意方向(sensor只能旋轉默認橫豎屏) | 四個方向 | 四個方向 |
userLandscape |
11 | 默認橫屏,但是能夠根據傳感器旋轉到任意橫屏方向 | 橫屏的兩個方向 | 默認的橫屏方向 |
userPortrait |
12 | 默認豎屏,但是能夠根據傳感器旋轉到任意豎屏方向 | 豎屏的兩個方向 | 默認的豎屏方向 |
fullUser |
13 | 允許使用用戶的任意方向 | 四個方向 | 不旋轉 |
locked |
14 | 鎖定爲當前方向 | 不旋轉 | 不旋轉 |
一起開黑學習呀。