Android layout的橫豎屏處理

2021-08-26 19:53:29 字數 2717 閱讀 1197

橫豎屏處理是開發應用是比較基礎的乙個要點,幾乎都會用到。

一、layout-land和layout-prot的區別與使用

預設情況下,建立的android專案裡只有乙個layout資料夾,儘管這樣也可以橫豎屏切換用,但是某些布局橫屏過後閒的格外的醜。

橫屏過後就顯示的不全了,有時候看著比較糾結。所以需要在橫屏的使用重新載入新的布局檔案

解決辦法是:先把layout目錄刪除了,因為可能跟之後的產生衝突。然後新建兩個資料夾,乙個layout-land,另乙個是layout-prot。

layout-land:存放橫屏布局檔案,如main.xml。布局名字與layout-prot的一樣

layout-prot:存放豎屏布局檔案,名字與layout-land的一樣

剩下的事情就可以交由手機處理了,手機會自動處理橫豎屏時布局之間的切換(前提是你的手機支援橫豎屏,並且:設定-顯示-自動轉屏)

先看看兩個布局檔案吧,activity可以不用管。

layout-land/main.xml

<?xml version="1.0" encoding="utf-8"?>

layout-prot/main.xml

<?xml version="1.0" encoding="utf-8"?>

效果圖:

豎屏:[img]

[img]

[/img]

橫屏:[img]

[img]

[/img]

注:切換模擬器的命令式ctrl+f12

這裡有一點需要注意的是,橫豎屏切換的生命週期的問題。

在上面的那種情況下,橫豎屏切換的時候,會銷毀activity後然後再次建立。

在不加入任何設定的時候,它的生命週期是這樣的:

oncreate-onstart-onresume 開始執行時

onpause-onstop-ondestroy-oncreate-onstart-onresume 橫豎屏切換的時候都是這樣

當在androidmanifest.xml中的activity標籤中加入了:

android:configchanges="orientation|keyboardhidden"

或者android:configchanges="orientation"後

橫豎屏切換就不需要重新載入了,也就是說不用銷毀activity後再重新建立activity了。

二、如何限定橫屏或者豎屏?

有些人討厭玩手機的時候橫豎屏來回的切換,有些應用也限定了應用程式只使用橫屏或者只使用豎屏,即使手機設定了「自動切換橫豎屏」。比如「水果忍者」是不能豎屏的(雙人模式除外了)

解決辦法:只需要在androidmanifest.xml的activity標籤中加入:android:screenorientation="landscape"

android:screenorientation="landscape"表示橫屏

或android:screenorientation="protrait"表示豎屏

這樣,所設定的應用程式就只能是橫屏或者豎屏了

三,橫豎屏切換時關於activity重新載入的問題(onconfigurationchanged()方法)

例如上面的那個例子,activity每次橫豎屏切換的時候是重新載入的,但是比如我們在玩遊戲的時候切換了一下螢幕,我們不可能要重新玩起,所以需要有一種解決橫豎屏切換的時候儲存當前狀態,不用重新載入的方法

解決方案:可以使用onconfigurationchanged方法,該方法可以在使用者切換橫豎屏的時候就不用重新執行oncreate方法了

1、需要在androidmanifest.xml中的對應的activity標籤裡加入

android:configchanges="orientation|keyboardhidden"

這條語句的意思是:橫豎屏切換或者實體鍵盤推出合上的時候配置資訊的改變

2、需要在androidmanifest.xml中加入許可權

3、需要在橫豎屏切換時共用的那個activity裡覆蓋onconfigurationchanged方法,如下

@override

public void onconfigurationchanged(configuration newconfig) else if(this.getresources().getconfiguration().orientation == configuration.orientation_portrait)

}這裡需要說的事,**中的if語句是判斷當前裝置是橫屏還是豎屏,然後有其對應的操作。之前竟然在螢幕切換的時候設定不同的布局,雖然能夠顯示不同的布局,但是這個方法就已經毫無意義了,因為橫豎屏切換到不同的布局我們可以用上面的第一種方法,而這種最好只是對應乙個布局吧,然後在裡面進行橫豎屏時候的其他操作,防止了重新載入

main.xml

<?xml version="1.0" encoding="utf-8"?>

這裡需要說一下videoview的全屏顯示的問題,橫屏後右邊總是空出一塊黑色區域,即使通過windowmanager的方式也不能解決,索性只能設定布局為居中顯示了,至少好看些

所以只是在清單檔案中加入了樣式:android:theme="@android:style/theme.notitlebar.fullscreen"

androidmanifest.xml

Android layout無法載入

布局無法載入,xml也沒有錯誤,提示note one or more layouts are missing the layout width or layout height attributes.these are required in most layouts 關閉android studi...

Android Layout基本概念

1.framelayout 單幀布局 其子元素沒有位置概念,所有元素放在左上角,但執行速度快 2.linearlayout 線性布局 線性布局,其子元素按水平或垂直方向挨著排 3.relativelayout 相對布局 相對布局,子元素可以相對relativelayout或其它子元素進行布局,其子元...

android layout 按比例布局

為了建立比例大小的子view,可以將linearlayout的寬度和高度設為fill parent,而將子view的寬度或是高度設為0,然後為子view設定不同權重 weight 這樣子view的大小就會權值成比例。本例使用橫向linearlayout,linearlayout的android la...