5

Android 开发者文档描述了如何设置Dialog主题Activity

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

<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 主题(或后代)。

4

1 回答 1

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>

在为以后的 API 使用真正的 Holo 对话框主题时:

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>

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

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

于 2013-12-15T16:50:48.257 回答