2011-03-02 85 views
4

我加了android:configChanges="orientation",我重寫了。我只想在設備具有平板大小的顯示分辨率設置時允許橫向方向更改(短邊大於480像素 - 建議更好的處理方式)。我一直在想,這將以兩種方式之一運行,但是我的手機或模擬器都不能在我的測試中工作。有條件地處理方向更改

我的第一個想法是不要調用超類'的實現,但我得到一個異常拋出,抱怨我沒有調用超類。

我的第二個想法是在將它傳遞給超類之前手動將newConfig.orientation設置爲Configuration.ORIENTATION_PORTRAIT。在我的Activity和框架中的實際Activity類之間,我有一個ActivityBase類,我使用它來覆蓋它。我可以在ActivityBase中爲newConfig.orientation的值進行烘烤,以確定配置對象實際上是否具有新值,但它會被忽略,並且方向更改已經發生。

我在哪裏可以放置代碼,使我可以在某些情況下有條件地縮短方向更改並允許其他方法?

回答

2

我會設置請求的方向在活動onCreate()方法來解決,這樣的:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

如果顯示不是xhdmi顯示或具有所需的分辨率。

+0

我假設這是在我的xml中使用orientation =「portrait」的等價物。所以,當我不叫這行代碼時,我正在使用設備給我的方向?聽起來不錯......現在就試試看。順便說一句...有關顯示器屬性的任何見解要看?我認爲px> 480在短邊...有沒有一種屬性或方法可以更簡潔地告訴我「超大屏幕」? – Rich 2011-03-02 15:53:30

+0

是的,這與在xml中設置屬性相同。對於顯示問題,請使用DisplayMetris:DisplayMetrics指標= new DisplayMetrics(); 。getWindowManager()getDefaultDisplay()getMetrics(指標)。此處定義的密度爲xhdmi的DENSITY_XHIGH。 – HefferWolf 2011-03-02 15:59:52

+0

可以測試'if((getResources()。getConfiguration().screenLayout&Configuration.SCREENLAYOUT_SIZE_MASK)== SCREENLAYOUT_SIZE_XLARGE)'工作(如果你正在使用at最少的API級別9,其中xlarge被添加)? – erichamion 2011-03-02 17:06:20