【问题标题】:How to display an ActionBarCompat Activity as a dialog setting its theme in AndroidManifest.xml?如何将 ActionBarCompat Activity 显示为在 AndroidManifest.xml 中设置其主题的对话框?
【发布时间】:2013-10-09 12:56:03
【问题描述】:

Android Developer documentation 描述了如何为Activity 设置Dialog 主题:

提示:如果您想要自定义对话框,您可以将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 主题(或后代)。

【问题讨论】:

    标签: android android-dialog android-theme illegalstateexception android-actionbar-compat


    【解决方案1】:

    前几天从 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

    【讨论】:

    • @drawable/dialog_full_holo_light 不适用于低于 11 的 SDK。我们应该将其添加到项目中(然后在哪里找到它?)还是从 xml 中删除?
    • @Giorgio,请参阅我的博文末尾的资源,它有一个完整的谷歌代码项目以及 Android 资源的链接——是的,你需要将它们添加到你的项目中,并且这是链接 - github.com/android/platform_frameworks_base/tree/master/core/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-17
    • 2021-01-10
    • 2012-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多