『壹』 android只支持橫屏旋轉,監聽自動旋轉開關
設置橫屏其實很簡單,就是設置android:screenOrientation就可以。所以我們先來了解一下android:screenOrientation的屬性都有哪些?
unspecified,默認值,由系統決定,不同手機可能不一致
landscape,強制橫屏顯示
portrait,強制豎屏顯
behind,與前一個activity方向相同
sensor,根據物理感測器方向轉動,用戶90度、180度、270度旋轉手機方向,activity都更著變化
sensorLandscape,橫屏旋轉,一般橫屏游戲會這樣設置
sensorPortrait,豎碰埋屏旋轉
nosensor,旋轉設備時候,界面不會跟著旋轉。初始化界面方向由系統控制
user,用戶當前設置的方向
而滿足我們需求的屬性,分別為
1 landscape :強制橫屏,不管自動旋轉開關是否開啟,都只能是正方向橫屏,不會180度旋轉
2 sensorLandscape : 橫屏旋轉,不管自動旋轉開關是否開啟,都會180度旋轉
這兩個屬性明顯不滿足我們的需求,這時候我們只能去監聽自動旋轉開關的狀態,然後設置對應的screenOrientation,這樣才能滿足需求。
但是這只是一次獲取,所以我們需求實時監聽開關狀態。
我們通過譽吵肆ContentObserver來監聽自動開關狀態的改變
了解了這些之後,我們就能完成需求了
1 初始化監聽
2 注冊監聽慶轎
3 退出時取消監聽
4 相關的類與方法
『貳』 React native orientation 屏幕旋轉監聽
android 和 iOS 都有在全局設置中固定屏幕方向的辦謹納法,但這樣不是特別理桐冊想,因為項目中,在不同頁面可能會需要橫屏或局晌宏豎屏,此時就可以使用 react-native-orientation ,這個擴展可以動態的鎖定/解鎖屏幕方向,或設置為指定的方向。
安裝方式
yarn add react-native-orientation
安裝完之後二選一 (這個是 rn 安裝原生組件的通用命令)
詳情可參考 官方介紹 或 這篇文章
然後繼續
android 打開 android/app/src/main/java/com/[project]/MainActivity.java
iOS 打開 ios/[project]/AppDelegate.m
安裝完事
使用方法,可直接前往 項目主頁 查看,非常簡單(其實上面的步驟在項目主頁中也有),這里說一個項目主頁沒提到的
在使用了如 lockToPortrait() 方法鎖定屏幕方向後,由 addOrientationListener 添加的監聽函數有不同
1、android 上將不會再觸發,直到調用 unlockAllOrientations() 解除鎖定
2、iOS 則不然,無論屏幕鎖定與否,都會觸發
『叄』 android屏幕轉換監聽的調用public void onConfigurationChanged(Configuration config) 次數的問題
看下這個吧我賣塵哪匯總的:Android橫兄簡豎切屏注意事項中碼
http://hi..com/spare_h/blog/item/11ec0b508163b90e377abeee.html
『肆』 android 橫屏狀態,如何監聽鍵盤的彈起與隱藏
android鍵盤監聽不了,只有監聽布局的狀態,所以要重寫布局進行監聽
『伍』 如何在android studio中實現 橫屏 和縱屏 的切換
在AndroidManifest.xml的每一個需要禁止轉向的Activity配置中加入android:screenOrientation=」landscape」 屬性。
參數說明:
1. landscape = 橫向
2. portrait = 縱向
避免在轉屏時重啟Activity
android中每次屏幕方向切換時都會重啟Activity,所以應該在Activity銷毀前保存當前活動的狀態,在Activity再次 Create的時候載入配置,那樣,進行中的游戲就不會自動重啟了!
要避免在轉屏時重啟Activity,可以通過在AndroidManifest.xml文件中重新定義方向(給每個Activity加上 android:configChanges=」keyboardHidden|orientation」屬性)。
在需要控制屏幕顯示方向的Activity中重寫 onConfigurationChanged(Configuration newConfig)方法,這樣在轉屏時就不會重啟Activity了。
『陸』 Android教程-屏幕方向-橫豎屏切換
標簽中設置:android:screenOrientation
Activity 在設備上的顯示方向。如果 Activity 是在 多窗口模式 下運行,系統會忽略該屬性。
其值可以是下列任一字元串:
例如: android:screenOrientation="landscape" 橫屏 android:screenOrientation="portrait" 豎屏
『柒』 Activity橫豎屏切換生命周期變化
onCreate ,
創建activity時調用。設置在該方法中,還以Bundle中可以提出用於創建該 Activity 所需的信息。
onStart ,
activity變為在屏幕上對用戶可見時,即獲得焦點時,會調用。
onResume ,
activity開始與用戶交互時調用(無論是啟動還是重新啟動一個活動,該方法總是被調用的)
onSaveInstanceState
onPause ,
activity被暫停或收回cpu和其他資源時調用,該方法用於保存活動狀態的
onStop ,
activity被停止並轉為不可見階段及後續的生命周期事件時,即失去焦點時調用
onDestroy ,
activity被完全從系統內存中移除時調用,該方法被調用可能是因為有人直接調用 finish()方法 或者系統決定停止該活動以釋放資源。
onRestoreInstanceState ,
Android在橫豎排切換時候,將主動銷毀activity和重新創建一個新的activity出來,在此過程中,onRestoreInstanceState就要被回調
onConfigurationChanged ,
配置指定屬性後,屏幕方向發生變化後回調此函數.
把該Activity添加
android:configChanges="orientation" ,
執行步驟3(切換成橫屏時)
android:configChanges="orientation" 對於4.04.0以上版本不生效
把該Activity添加 android:configChanges="orientation|screenSize" ,
執行步驟3(切換成橫屏時)
onConfigurationChanged-->
只列印onConfigChanged
把 android:configChanges="orientation|screenSize" 改成 android:configChanges="orientation|keyboardHidden|screenSize"
執行步驟3(切換橫屏幕)
只列印
onConfigChanged
執行步驟4(切換豎屏幕)
只列印onConfigChanged
切記一定要加上後邊的screenSize否則在4.0以上版本生命周期執行不生效。
當前Activity產生事件彈出Toast和AlertDialog的時候Activity的生命周期不會有改變
Activity運行時按下HOME鍵(跟被完全覆蓋是一樣的):
onPause --> onStop onRestart -->onStart--->onResume
Activity未被完全覆蓋只是失去焦點:onPause--->onResume
測試用手機版本5.1.1
Android實現屏幕旋轉方法
這種方法的優點:即使屏幕旋轉,Activity也不會重新onCreate。
缺點:屏幕只有一個方向。
這個方法的優點:我們可以隨時監聽屏幕旋轉變化,並對應做出相應的操作;
缺點:它只能一次旋轉90度,如果一下子旋轉180度,onConfigurationChanged函數不會被調用。
4.設置方向的其他方式
在AndroidManifest.xml設置
橫向顯示,但是基於設備感測器,既可以是按正常方向顯示,也可以反向顯示,在API Level 9中被引入。
android:screenOrientation="sensorLandscape"
縱向顯示,但是基於設備感測器,既可以是按正常方向顯示,也可以反向顯示,在API Level 9中被引入。
android:screenOrientation="sensorLandscape"
demo
『捌』 android 如何監聽前後台切換
這段時間有需求,需要利用aop切面技術完成數據統計的工作,其中需要統計活躍(定的規則是:用戶從後台切換到前台就算一次活躍)。所以關於如何監聽前後台切換就有以下的描寫。
一.使用ActivityLifecycleCallbacks簡單app進入後台
有時需要監聽到應用在前後台切換並做些處理,一般的做法可能是建立一個BaseActivity,然後全部的Activity都繼承它,在BaseActivity的onStart和onStop中計數去處理。這樣並不是最好的方式,不做詳細介紹,有更好的方式,道理其實差不多,就是藉助ActivityLifecycleCallbacks來實現。
1)寫了個幫助類:
2)Application中使用(注意:僅在Application中才能使用,因為Application的生命周期能監聽到每個Activity)
原文地址: https://blog.csdn.net/bzlj2912009596/article/details/80073396
『玖』 VideoView+MediaController橫向全屏視頻播放+緩沖監聽
VideoView繼承了SurfaceView同時實現了MediaPlayerControl介面,MediaController是安卓封裝的輔助控制器,帶有暫停,播放,停止,進度條等控制項。通過VideoView+MediaController可以很輕松的實現視頻播放、停止、快進、快退等功能。
重寫VideoView實現全屏
布局直接布局引用
VideoView與MediaController建立關聯
在控制器Activity設置清單文件
android:configChanges="orientation|screenSize|keyboardHidden"
android:screenOrientation="landscape" //Activity 初始默認橫豎屏狀態
備註:對android:configChanges屬性,一般認為有以下幾點:
1、不設置Activity的android:configChanges時,切屏會重新調用各個生命周期,切橫屏時會執行一次,切豎屏時會執行兩次
2、設置Activity的android:configChanges="orientation"時,切屏還是會重新調用各個生命周期,切橫、豎屏時只會執行一次
3、設置Activity的android:configChanges="orientation|keyboardHidden"時,切屏不會重新調用各個生命周期,只會執行onConfigurationChanged方法
但是,自從Android 3.2(API 13),在設置Activity的android:configChanges="orientation|keyboardHidden"後,還是一樣會重新調用各個生命周期的。因為screen size也開始跟著設備的橫豎切換而改變。所以,在AndroidManifest.xml里設置的MiniSdkVersion和 TargetSdkVersion屬性大於等於13的情況下,如果你想阻止程序在運行時重新載入Activity,除了設置"orientation",你還必須設置"ScreenSize"。
設置緩沖狀態監聽,第一次載入視頻的時候不會走緩沖狀態,第一次視頻載入出來會走 播放狀態,然後以後緩存的同時會走緩存狀態
『拾』 android 如何監聽屏幕當前是否全屏
可以在屏幕的Activity加監聽屏幕屬性改變,發生改變則檢查當前是否全屏狀態。
是全屏狀態發送,全屏的廣播消息,到監聽應用觸發操作。
@Override
public void onWindowAttributesChanged(LayoutParams params) {
// TODO Auto-generated method stub
super.onWindowAttributesChanged(params);
Log.e(TAG,"onWindowAttributesChanged()"+getWindow().getAttributes().flags);
if (WindowManager.LayoutParams.FLAG_FULLSCREEN == getWindow().getAttributes().flags) {
Log.e(TAG,"onWindowAttributesChanged() FLAG_FULLSCREEN");
}
}
(注意該判斷在屏幕切換橫豎屏是也會觸發,需要根據實際情況過濾橫豎屏切換的情況。)