寫在20110721 橫豎屏切換

2021-09-01 18:50:32 字數 2588 閱讀 1411

對於橫豎屏切換的問題,大概的解決辦法是:

1.只豎屏顯示

android:screenorientation="portrait"

只橫屏顯示

android:screenorientation="landscape"

2.簡單的防止過載

activity每次橫豎屏切換都會重新呼叫onpause->onstop->ondestory-> oncreate>onstart->onresume,為此涉及到內容和資料的儲存和讀取,否則轉屏之前的內容就會消失了。很多時候為了儲存之前的資料,結果讓程式變得很繁瑣,為此android提供了在androidmanifest中設定android:configchanges屬性,從而讓activity不延續上述的重建流程。第一次進入activity會呼叫oncreate(),橫豎屏切換之後就不會去執行oncreat函式了,而是會去呼叫onconfigurationchanged()這樣就能控制橫豎屏的切換了。使用者可以在activity或view的onconfigurationchanged(configurationnewconfig)函式中獲取當前橫豎屏引數。

在 androidmanifest.xml中加入:android:configchanges="orientation|keyboardhidden"

在activity中過載onconfigurationchanged事件

@override

publicvoid onconfigurationchanged(configuration config)

[color=red][b]注意:[/b][/color]

當我們在android 4.0上像之前那樣設定橫豎屏時,會發現竟然沒有效果,activity依然走自己的生命週期,這是因為在api level 13以後android做了修改了,sdk描述如下:

也就是說在android 3.2(api level 13)以後,當裝置橫豎屏切換時螢幕尺寸也改變了。因此,如果你想在api level 13或者更高的環境下,像以前那樣攔截裝置的橫豎屏切換,你需要在orientation後加上screensize,在androidmanifest.xml中的activity加入以下屬性:

android:configchanges="orientation|keyboardhidden|screensize"。

3.橫豎屏分別布局

橫豎屏分別布局的方法是:

在res下新建

layout-land 橫屏

layout-port 豎屏

然後把layout中的xml檔案分別考到以上目錄,修改布局就可以了**中不做任何更改。

在 androidmanifest.xml檔案中的主activity中加入

android:configchanges="orientation|keyboardhidden"

然後在主activity中的onconfigurationchanged加入

@override

public void onconfigurationchanged(configuration config)

if (config.orientation == configuration.orientation_landscape)

}4.徹底禁止翻轉

當然如果要徹底禁止翻轉,可以設定android:screenorientation的屬性為nosensor,如此就可以忽略重力感應帶來的麻煩了。不過在模擬器上不管用,在真機上是正確的。

這裡提乙個小知識,android模擬器中,快捷鍵"ctrl+f11/f12"可以實現轉屏

5.自適應轉換

如果想讓它啟動的時候是橫屏的話就橫屏表示,縱屏的話就縱屏表示,然後手機切換橫豎屏就不能用了該怎麼解決呢?

首先:在mainfest.xml中追加

android:screenorientation="sensor"android:configchanges="orientation|keyboardhidden"

這兩個屬性。

第二步:取得螢幕的長和寬,進行比較設定橫豎屏的變數。

1. display display = getwindowmanager().getdefaultdisplay();

2. int width = display.getwidth();

3. int height = display.getheight();

4. if (width > height) else

第三步:在onconfigurationchanged()函式中追加this.setrequestedorientation(orientation)就行了

1. public void onconfigurationchanged(configuration newconfig)

但是這樣的話你切到別的畫面的時候再回到原畫面,它就仍然是橫的或者是縱的。怎麼讓它從別的螢幕回來後,又重新橫豎屏布局呢?

只要在onresume()中在設定下就行了。但是這個只支援橫豎屏只有乙個layout的。橫豎屏分別對應layout的還不知道該怎麼解決。

1. protected void onresume() else

12. super.onresume();

13.}

android 橫豎屏切換

private onclicklistener onclick new onclicklistener else 監聽系統設定的更改 override public void onconfigurationchanged configuration newconfig 在4.0以後需要加上scree...

Android 橫豎屏切換

今天老闆讓我看看有沒有辦法能讓我的背景桌布自己橫豎螢幕切換,今天發表下研究的成果。1.首先有時候開發的時候需要強制橫屏或者豎屏的時候,只需要在androidmanifest.xml中設定activity的android screenorientatation屬性就行了。unspecified 預設值...

Android橫豎屏切換

在 androidmanifest.xml 檔案的activity 設定android screenorentation 屬性 unspecified 預設值 由系統來判斷顯示方向.判定的策略是和裝置相關的,所以不同的裝置會有不同的顯示方向.landscape 橫屏顯示 寬比高要長 portrait...