有時(shí)在開發(fā)的過程中义郑,我們需要實(shí)現(xiàn)Activity的橫豎屏切換相關(guān)功能,特別是涉及到視頻播放器的開發(fā)梆暮,橫屏播放和豎屏播放的實(shí)現(xiàn)顯得十分重要猜拾。
1.設(shè)置Activity顯示方向
Android的屏幕顯示方向通過設(shè)置AndroidManifest.xml中,activity的screenOrientation屬性實(shí)現(xiàn):
android:screenOrientation="portrait"
screenOrientation主要有以下七種屬性值:
- portrait. 設(shè)置了該值A(chǔ)ctivity將會(huì)以豎屏顯示。
- landscape. 設(shè)置了該值A(chǔ)ctivity將會(huì)以橫屏顯示肺樟。
- user: 設(shè)置了該值A(chǔ)ctivity將根據(jù)用戶的首選的方向顯示檐春。
- behind: 根據(jù)下方Activity的方向顯示(Activity堆棧中)。
- sensor:由重力感應(yīng)器決定Activity的方向儡嘶,用戶旋轉(zhuǎn)設(shè)備Activity的方向會(huì)改變喇聊。
- nosensor:不根據(jù)重力感應(yīng)器改變Activity方向恍风,用戶旋轉(zhuǎn)設(shè)備Activity的方向不會(huì)改變蹦狂。
- unspecified: 使用默認(rèn)值。顯示的方向?qū)⒂上到y(tǒng)決定朋贬,由于設(shè)備的策略差異凯楔,不同設(shè)備顯示的方向?qū)?huì)不同。
2.處理運(yùn)行時(shí)配置變更
某些設(shè)備在運(yùn)行時(shí)可能發(fā)生配置改變锦募,這會(huì)導(dǎo)致Activity重啟正在運(yùn)行的Activity(先調(diào)用onDestroy再調(diào)用onCreate)摆屯,重啟Activity開銷量十分大,且會(huì)造成不好的用戶體驗(yàn)糠亩。android:configChanges的作用是在該屬性中指定某些特定配置虐骑,如果這些配置發(fā)生改變則不會(huì)重啟Activity(先調(diào)用onDstroy再調(diào)用onCreate),而是調(diào)用onConfigChanged方法赎线。因此廷没,在橫豎屏切換時(shí),由于運(yùn)行時(shí)配置會(huì)發(fā)生變化垂寥,需要在android:configChanges添加如下內(nèi)容:
android:configChanges="orientation|keybordHidden"
3.通過代碼切換橫豎屏
通過代碼切換橫豎屏主要通過Activity的setRequestedOrientation(int requestedOrientation)實(shí)現(xiàn):
// 切換成豎屏
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
調(diào)用切換屏幕代碼前需要配置configChanges屬性:
android:configChanges="orientation|keybordHidden"
否則通過代碼進(jìn)行橫豎屏切換可能會(huì)無效颠黎。
每次屏幕切換時(shí),Activity都會(huì)調(diào)用onConfigurationChanged方法滞项,如果要在橫豎屏變化時(shí)做一些操作狭归,可將操作寫在onConfigurationChanged中。
@Override
public void onConfigurationChanged(Configuration config) {
super.onConfigurationChanged(config);
// 屏幕切換時(shí)的操作
}
4.橫豎屏顯示不同布局
在res文件夾中分別創(chuàng)建layout-land和layout-port文件夾文判,并創(chuàng)建相同名稱的布局文件过椎,如創(chuàng)建MainActivity的布局文件layout_main.xml:
然后在onConfigurationChanged方法中,設(shè)置對(duì)應(yīng)的布局文件:
@Override
public void onConfigurationChanged(Configuration config) {
super.onConfigurationChanged(config);
// 屏幕切換時(shí)的操作
if (config.orientation == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) {
// 切換成豎屏
setContentView(R.layout.activity_main);
// findViewById
// 進(jìn)行一些操作戏仓。疚宇。。
} else {
// 切換成橫屏
setContentView(R.layout.activity_main);
// findViewById
// 進(jìn)行一些操作柜去。灰嫉。。
}
}
這樣嗓奢,橫豎屏切換時(shí)讼撒,就會(huì)加載不同的布局。
如要查看更多Android橫豎屏切換相關(guān)信息,請(qǐng)參考博客: