5

Die Android Developer documentation beschreibt, wie für ein Activity ein Dialog Thema setzen:Wie wird eine ActionBarCompat-Aktivität als Dialog angezeigt, der sein Thema in AndroidManifest.xml einstellt?

Tipp: Wenn Sie einen benutzerdefinierten Dialog wollen, können Sie stattdessen ein Activity als Dialog angezeigt werden, anstatt die Dialog APIs verwenden. Einfach eine Aktivität erstellen und sein Thema zu Theme.Holo.Dialog im <activity> Manifest Element gesetzt:

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

Das ist es. Die Aktivität wird jetzt in einem Dialogfenster anstelle von Vollbild angezeigt.

Ich versuche dies für eine Anwendung zu tun, die ActionBarCompat verwendet. Ich habe versucht, verschiedene Themen wie ...

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

jedoch keiner von ihnen scheint, da ich mit der gleichen Fehlermeldung am Ende zu arbeiten:

java.lang.IllegalStateException: Sie müssen Verwenden Sie ein Theme.AppCompat-Thema (oder einen Nachkommen) mit dieser Aktivität.

Antwort

8

Drücken Sie einfach das gleiche Problem Umwandlung neulich von ActionBarSherlock 4.2.0 (die einen speziellen Dialog Thema in späteren Versionen entfernt hat, denn es hat nicht viel mit ActionBar wirklich zu tun ...).

ich von ihm inspiriert, obwohl und kam für älteren APIs mit einem Thema auf:

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> 

während des reale Holo Dialogdesign für eine spätere APIs:

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> 

Endlich hatte ich ein verwenden plain Aktivität, um die ausgelöste Ausnahme zu vermeiden, plus eine weitere, bei der ActionBarView die Breite/Höhe überprüft.

Sie mein Blog-Post lesen kann mit einem Link zu dem vollständigen Quellcode, am Ende: http://dandar3.blogspot.com/2013/12/actionbarcompat-dialog-activity.html

+0

@ ziehbar/dialog_full_holo_light ist für SDK nicht verfügbar Moll als 11. Sollten wir es in das Projekt ein (wo um es dann zu finden?) oder entfernen Sie es aus dem XML? – Giorgio

+1

@Giorgio, sehen Sie die Ressourcen am Ende meines Blogposts, es hat ein vollständiges Quellprojekt in Google Code sowie Links zu Android-Ressourcen - ja, Sie müssen sie zu Ihrem Projekt hinzufügen, und hier ist der Link - https: //github.com/android/platform_frameworks_base/tree/master/core/res/res –