5

Android Developer documentation介紹如何設置一個Dialog主題爲Activity如何在AndroidManifest.xml中將ActionBarCompat Activity顯示爲設置其主題的對話框?

提示:如果你想要一個自定義對話框,可以改爲顯示Activity爲對話而不是使用Dialog的API。只需創建一個活動,並在<activity>清單元素主題設置爲Theme.Holo.Dialog

<activity android:theme="@android:style/Theme.Holo.Dialog" >

就是這樣。該活動現在顯示在對話窗口中而不是全屏。

我想爲使用ActionBarCompat的應用程序執行此操作。我一直在嘗試不同的主題,如...

android:theme="@android:style/Theme.Dialog" 
android:theme="@style/Theme.AppCompat.Base.CompactMenu.Dialog" 
android:theme="@style/Theme.AppCompat.CompactMenu.Dialog" 

但他們都不似乎因爲我結束了相同的錯誤消息的工作:

java.lang.IllegalStateException:您需要在此活動中使用Theme.AppCompat主題(或後代)。

回答

8

只要按同樣的問題,有一天從ActionBarSherlock 4.2.0(這在以後的版本刪除,因爲它沒有太多的做動作條真的...一個特殊的對話主題)轉換。

我從它的啓發,但並與舊的API的主題上來:

res\values\styles.xml 
<style name="AppTheme.Dialog" parent="android:Theme.Light"> 
    <item name="android:windowNoTitle">true</item> 
    <item name="android:windowFrame">@null</item> 
    <item name="android:windowIsFloating">true</item> 
    <item name="android:windowContentOverlay">@null</item> 
    <item name="android:windowBackground">@drawable/dialog_full_holo_light</item> 
    <item name="android:maxWidth">600dp</item> 
    <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item> 
</style> 
而使用後的API真正的全息對話主題

res\values-v11\styles.xml 
<style name="AppTheme.Dialog" parent="android:Theme.Holo.Light.Dialog"> 
    <item name="android:windowNoTitle">true</item> 
    <item name="android:windowCloseOnTouchOutside">true</item> 
</style> 

最後,我不得不使用平原活動,以避免你得到的異常,再加上另一個ActionBarView檢查它的寬度/高度。

你可以閱讀我的博客文章,並在最後一個鏈接到完整的源代碼: http://dandar3.blogspot.com/2013/12/actionbarcompat-dialog-activity.html

+0

@繪製/ dialog_full_holo_light不適用於未成年人SDK比11.如果我們把它添加到項目中(其中找到它呢?)或從xml中刪除它? – Giorgio

+1

@Giorgio,請參閱我的博文末尾的資源,它在Google Code中有一個完整的源項目以及指向Android資源的鏈接 - 是的,您需要將它們添加到您的項目中,並且這裏是鏈接 - https: //github.com/android/platform_frameworks_base/tree/master/core/res/res –

相關問題