2011-04-11 180 views
117

今天早上我想出了一個問題,試圖處理onConfigurationChanged事件。問題是,當我改變手機方向時,我重寫的方法沒有被調用。根本沒有打電話。onConfigurationChanged沒有被調用

我已經把android:configChanges="orientation"放在android文檔中提到的清單中定義的活動上,但這並沒有什麼區別。

你想出了這個問題嗎?

+1

我對android有同樣的問題:configChanges =「keyboardHidden」 - 當軟鍵盤滑入或滑出時,onConfigurationChanged沒有被調用。 – 2011-05-24 07:17:36

+0

鍵盤隱藏不是由軟件鍵盤觸發的,只能通過硬件鍵盤來觸發,就像Droid上的滑動鍵盤一樣。 – nmr 2012-01-18 20:24:46

+7

你應該在'機器人添加「屏幕大小」:configChanges' 這就是谷歌的javadoc說: '注意:如果您的應用程序的目標API級別13或更高版本(由宣稱的minSdkVersion和targetSdkVersion屬性),那麼你還應聲明「screenSize」配置,因爲當設備在縱向和橫向之間切換時它也會發生變化。「# – Ektos974 2014-01-27 16:59:45

回答

28

的問題是,如果你使用這種方法

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

強迫你Activity到肖像模式的方向,你沒有候選人獲得orientation變化。

所以解決辦法是不要setRequestOrientation到一個特定的模式。但使用SCREEN_ORIENTATION_SENSOR.

+5

是的,這工作,但如果我不希望我的應用程序旋轉?我希望它保持橫向模式。 – stoefln 2011-12-10 14:27:17

+0

您必須指定 您的清單文件 – 2012-12-27 07:01:05

-2

您在導入語句中是否有android.content.res.Configuration?如果按Ctrl+Shift+O,Eclipse可以自動插入導入。

如果缺少,編譯器將無法識別出您合法地覆蓋了超類方法,因此會拋出錯誤。

+0

是的,進口已經到位,有什麼想法?因爲我沒有收到任何錯誤或任何錯誤,只是沒有被調用。 – lblasa 2011-04-11 10:39:25

+0

這很漂亮>< – 2011-04-11 10:44:30

+0

我不知道這是否可能與所有應用程序都是以縱向模式進行相關的事實。我需要處理onConfigurationChangedEvent的活動是一個包含在TabHost中的活動,該模式是肖像。但無論如何,我還沒有發現任何意見,這是捕捉該事件的問題。我真的沒有想法。 – lblasa 2011-04-11 10:46:48

17
  1. 檢查你是不是在Activity或在Application級使用android:screenOrientation
  2. 請嘗試使用android:configChanges="orientation|keyboardHidden"
+1

如何使用android:screenOrientation,我想onConfigurationChanged方法運行,我能做什麼,thx – Bingchean 2015-06-09 02:27:13

14

明顯是他的第二選項100%的錢。

嘗試android:configChanges="orientation|keyboardHidden|screenSize"

我有完全一樣的問題,並在1.6模擬器加keyboardHidden導致onConfigurationChanged旋轉過程中被調用。刪除它並停止被叫。

+0

小修正screenSize(注意大寫。) – pahan 2013-03-31 06:16:26

0

我有同樣的問題,我有清單中指定的「android:screenOrientation」和「android:configChanges」。當我刪除第一個,onConfigurationChanged()被調用旋轉。奇怪,但它炒菜鍋)

+0

但是,您如何旋轉呢? – 2014-01-13 14:18:33

234

這是我的〜同樣的問題精怪:

注意:從Android 3.2開始(API等級13),「屏幕尺寸」 也改變時之間的設備切換肖像和風景 方向。因此,如果要在開發API級別13或更高級別(由minSdkVersion和targetSdkVersion屬性聲明的 )時爲 方向更改而阻止運行時重新啓動,則 除「方向」外還必須包含「screenSize」值爲 。也就是說,你必須decalare android:configChanges =「orientation | screenSize」。但是,如果您的 應用程序的目標級別爲12或更低,則您的活動始終會自行處理此配置更改(即使在更高版本的Android 3.2或更高版本的設備上運行此配置更改 也不會重新啓動您的活動)。

(從http://developer.android.com/guide/topics/resources/runtime-changes.html

TL; DR:添加 「|屏幕尺寸」 來configChanges目標API等級13+

+1

奇怪的問題..和好的soln – vnshetty 2012-07-25 04:35:51

+9

哇,只是一個屬性被添加和該死的所有,'+ 1'從我身邊''screenSize「'它是。 – Anuj 2012-09-14 11:02:15

+0

@philipp將傳感器的方向設置成什麼?不知道這將如何幫助。感謝編輯。 – nmr 2012-09-28 21:26:24

5

,當我有同樣的問題 - onConfigurationChanged當設備改變方向不叫儘管在清單文件中有android:configChanges="orientation|keyboardHidden"。我用的代碼共享的文檔片斷通過Deva這裏

orientation is not working in 2.3.3?

檢查是否onConfigurationChanged是被調用。不是。

試驗的幾個小時後,我意識到,我在清單文件

<uses-sdk 
    android:minSdkVersion="8" 
    android:targetSdkVersion="15"/> 

和改變android:targetSdkVersion="15"android:targetSdkVersion="8"以下行,onConfigurationChanged開始被調用。因此,清單的一部分終於看起來像你的設備具有「屏幕旋轉」設置爲ON

"Screen rotation" setting

+0

你節省了我的生命! – jlopez 2012-12-04 12:39:43

+0

很高興幫助你。 – aLearner 2012-12-04 12:56:28

+9

您遇到的問題是缺少的屬性:屏幕大小。請更新您的答案。這對於開發andriod開發者來說是一個誤導性的「修復」 – Tobrun 2013-01-30 13:40:59

21

檢查。只需將偵聽器添加到screenSize即可。

android:configChanges="orientation|screenSize" 
+5

我有這個有趣的問題...:D – Dharmendra 2013-10-02 17:11:03

+0

即使「屏幕旋轉」選項爲OFF,是否可以旋轉活動?如果是,請告訴我該怎麼做......?根據我的理解,這不起作用,但某些應用程序會將活動旋轉爲風景。 – Srinivasan 2015-12-15 13:55:32

+0

S ** t !!!花了4-5小時試圖讓我的代碼工作!一種重寫這個的方法,正如我從另一個答案中學到的,是在清單中包含 suku 2016-01-17 11:42:01

30

的4.0有些設備不調用onConfigurationChanged這個

<uses-sdk 
    android:minSdkVersion="8" 
    android:targetSdkVersion="8"/> 
2

我剛剛發現,如果您有:

android:screenOrientation="landscape" 

在清單,onConfigurationChanged()不會太叫...

這可能類似於:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

設置方向阻止onConfigurationChanged()。

3
<uses-sdk android:minSdkVersion="8" android:maxSdkVersion="17" /> 

不要使用任何目標SDK版本讓你併發症。併爲所有API級別使用它作爲配置變化監聽

android:configChanges="orientation|keyboardHidden|screenLayout" 
3

不知道這是它最好的地方,但在遇到此問題 - 我發現一些有趣的事情。

如果onConfigurationChanged()監聽器不工作,那麼的onCreate()在每次方向改變時再次調用。

如果onConfigurationChanged()聽者正在工作,則該方法被調用,而不是的onCreate()時取向的變化。

+0

這就是我所看到的 - 但我不想成爲。根據文檔,它不應該以這種方式發生。很混亂。 – slycrel 2014-10-09 19:51:29

13

我花了幾十分鐘找出爲什麼它不起作用。我加了screenSize,但它仍然沒有工作。

原來,我已經將android:configChanges添加到<application>元素,而不是我應該擁有的<activity>元素!

當然,這是我的錯誤,但我們都知道,我們所有人都花了很多時間來處理這種愚蠢的錯誤。所以,我添加了這個答案,以防萬一有像我這樣的另一個愚蠢的程序員。

+0

我也是這麼做的,謝謝你救了我 – 2016-09-30 19:26:34

+0

救命恩,謝謝! – Tommie 2017-01-29 21:55:18

+0

何感謝老兄! – Laurent 2017-10-15 13:30:02

1

所有解決方案都無法正常工作我嘗試在Android清單文件中刪除我的主題活動。所以很奇怪

<activity 
     android:name="MyActivity" 
     android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation" 
     android:theme="@style/MyTheme" --> remove this line 
     /> 



<style name="MyTheme" parent="Theme.AppCompat.NoActionBar"> 
    <item name="windowNoTitle">true</item> 
    <item name="android:windowIsTranslucent">true</item> 
</style> 
1

@ thanhbinh84給了我一個想法是什麼可能導致這一點。
刪除 <item name="android:windowIsTranslucent">true</item> 從我的主題在styles.xml中修復它!

1

無的建議,工作對我來說(我不得不作出反應這個問題本地項目),但調試了幾個小時之後,我發現,如果你有這條線在AppTheme styles.xml的

<item name="android:windowIsTranslucent">true</item> 

然後該應用程序不會旋轉。