如何将ActionBarCompat Activity显示为在AndroidManifest.xml中设置其主题的对话框?

JJD*_*JJD 5 android android-theme illegalstateexception android-dialog android-actionbar-compat

Android开发者文档介绍如何设置一个Dialog主题为Activity:

提示:如果需要自定义对话框,则可以Activity将对话框显示为对话框,而不是使用DialogAPI.只需创建一个活动并将其主题设置Theme.Holo.Dialog<activity>manifest元素:

<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"
Run Code Online (Sandbox Code Playgroud)

但是,由于我最终得到相同的错误消息,它们似乎都没有工作:

java.lang.IllegalStateException:您需要将Theme.AppCompat主题(或后代)与此活动一起使用.

Dan*_*ar3 8

刚刚从ActionBarSherlock 4.2.0转换出同样的问题(在以后的版本中删除了一个特殊的对话框主题,因为它与ActionBar没有多大关系......).

我从中受到了启发,并提出了旧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>
Run Code Online (Sandbox Code Playgroud)

使用真正的Holo对话框主题用于以后的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>
Run Code Online (Sandbox Code Playgroud)

最后,我不得不使用一个普通的Activity来避免你得到的异常,再加上另一个ActionBarView检查它的宽度/高度.

您可以阅读我的博客文章,最后附带完整源代码的链接:http: //dandar3.blogspot.com/2013/12/actionbarcompat-dialog-activity.html