Android Studio 0.4.5
用于创建自定义对话框的Android文档:http://developer.android.com/guide/topics/ui/dialogs.html
如果需要自定义对话框,则可以将“活动”显示为对话框,而不是使用“对话框API” . 只需创建一个活动并将其主题设置为 <activity>
清单元素中的Theme.Holo.Dialog:
<activity android:theme="@android:style/Theme.Holo.Dialog" >
但是,当我尝试这个时,我得到以下异常:
java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity
我支持以下内容,我不能使用大于10的内容:
minSdkVersion 10
targetSdkVersion 19
在我的风格中,我有以下内容:
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
在我的清单中,我有这个活动:
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:theme="@android:style/Theme.Holo.Light.Dialog"
android:name="com.ssd.register.Dialog_update"
android:label="@string/title_activity_dialog_update" >
</activity>
像我这样创建对话框是我要做的事情,因为我已经完成了布局 .
谁能告诉我如何解决这个问题?
30 回答
我遇到了这个问题,即使我的主题是
AppCompat
主题,我的活动是AppCompatActivity
(或Activity
,如其他人的答案所示) . 所以我清理,重建并重新运行项目 .( Build -> Clean Project ; Build -> Rebuild Project ; Run -> Run )
它可能看起来很愚蠢,但现在它 works great !
希望它有所帮助!
您遇到此问题的原因是您尝试应用对话框主题的活动正在扩展
ActionBarActivity
,这需要应用AppCompat
主题 .Update :扩展
AppCompatActivity
也会出现此问题在这种情况下,将Java继承从
ActionBarActivity
更改为Activity
,并将对话框主题保留在清单中,非Theme.AppCompat
值一般规则是,如果您希望您的代码支持旧版本的Android,它应该具有
AppCompat
主题,并且Java代码应该扩展AppCompatActivity
. 如果您有一个不需要此支持的活动,例如您只关心Android的最新版本和功能,您可以应用任何主题,但java代码必须扩展旧的Activity
.注意:当从
AppCompatActivity
(或子类,ActionBarActivity
)更改为Activity
时,还必须将"support"的各种调用更改为不带"support"的相应调用 . 所以,而不是getSupportFragmentManager
,请调用getFragmentManager
.您需要做的就是将
android:theme="@style/Theme.AppCompat.Light"
添加到AndroidManifest.xml
文件中的应用程序标记中 .在上面的评论中从@MarkKeen复制答案,因为我遇到了同样的问题 .
我在帖子顶部说明了错误,并在我添加了一个警告对话框后发生了 . 我在清单中有所有相关的样式信息 . 通过更改警报生成器中的上下文引用来解决我的问题 - 我更改了:
至:
没有更多的问题 .
min sdk是10.
ActionBar
可从api级别11获得 . 因此对于10,您将使用支持库中的AppCompat
,您需要使用Theme.AppCompat
或其后代 .使用
或者,如果你不想在顶部的动作栏
更多信息 @
http://developer.android.com/guide/topics/ui/actionbar.html
编辑:
我可能误读了op post .
似乎操作需要具有活动主题的Dialog . 因此,正如Bobbake4已经建议的那样,扩展
Activity
而不是ActionBarActivity
.还可以在下面的链接中查看@ Dialog Attributes
http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.4_r1/frameworks/base/core/res/res/values/themes.xml/
这对我有用,我刚刚改变了:
对此:
这就是为我解决的问题:我没有在清单中指定主题,而是在
onCreate
中为每个扩展ActionBarActivity
的活动定义了它:这里
MyAppTheme
是Theme.AppCompat
的后代,并以xml定义 . 请注意,必须在super.onCreate
和setContentView
之前设置主题 .去你的风格并把父母
代替
在我的情况下,我的res目录中没有values-v21文件 . 然后我创建它并在其中添加以下代码:
如果需要在style.xml上扩展ActionBarActivity:
如果你将你的应用程序的主题设置为android:Theme.Material.Light而不是 AppTheme.Base 那么你将得到一个“IllegalStateException:你需要使用一个Theme.AppCompat主题(或后代)与此活动”错误 .
更改所需活动的主题 . 这对我有用:
我有同样的问题,但当我把它放在清单上时它解决了:android:theme =“@ style / Theme.AppCompat .
我在 Samsung 设备上遇到了这样的崩溃,即使该活动确实使用了Theme.AppCompat . 根本原因与三星奇怪的优化有关侧:
我的解决方案只是删除
android:launchMode="singleTask"
做就是了
代替
对我来说是使用ContextThemeWrapper的解决方案:
来自Android - How to create FAB programmatically?
将您的主题样式父级更改为
这对我有用......
你有很多解决这个错误的方法 .
您应该使用Activity或FragmentActivity而不是ActionbarActivity或AppCompatActivity
如果要使用ActionbarActivity或AppCompatActivity,则应将styles.xml Theme.Holo.xxxx更改为Theme.AppCompat.Light(如有必要,请添加到DarkActionbar)
如果您不需要有关操作栏或AppCompat的高级属性,则无需使用Actionbar或AppCompat .
在Android清单中,只需将活动主题更改为AppTheme,如下面的代码片段
这是你想在片段中使用AlertDialog的时候
我也有这个问题以及我做了什么来修复它,并且仍然使用Holo主题是采取以下步骤:
首先我替换了这个导入:
这一个:
然后改变我的扩展名:
对此:
并且还必须更改此导入:
这个导入:
然后您可以在活动级别的清单中使用主题标记:
最后,(除非您的项目中有其他类必须使用v7 appCompat),您可以清理并重建项目,也可以在应用程序级别的gradle构建文件中删除此条目:
如果您的项目中有其他类必须使用v7 appCompat,那么只需清理并重建项目即可 .
您之所以这样,是因为您希望将以前的sdk版本中的主题样式中的Material Design应用到21.
ActionBarActivity
需要AppTheme
所以如果您还想阻止自己对AppTheme进行自定义,则只需更改styles.xml (之前的sdk 21)所以这样,可以继承App Compat主题 .为了这:
这个对我有用:
您的活动正在扩展 ActionBarActivity ,这需要应用 AppCompat.theme . 从 ActionBarActivity 更改为 Activity 或 FragmentActivity ,它将解决问题 .
快速解决方案
在styles.xml中更改基本主题父级
替换
至
根据我的经验,问题是我展示对话框的背景 . 在按钮内单击我以这种方式实例化AlertDialog:
但上下文不正确并导致错误 . 我以这种方式使用应用程序上下文更改了它:
在声明部分:
在onCreate方法中
最后在我需要AlertDialog的代码中:
这是我的解决方案 .
这个解决方案对我有用 .
设计库依赖于Support v4和AppCompat支持库,因此不要在gradle中为appcompat和设计库使用不同的版本 .
使用
代替
我遇到了同样的问题 . 因为我正在创建自定义导航抽屉 . 但我忘记在我的清单中提到这样的主题
机器人:主题= “@风格/ Theme.AppCompat.NoActionBar”
一旦我将上述主题添加到我的清单中,它就解决了问题 .
对我来说,即使我将
Theme.AppCompat
作为我的应用程序的基本主题,上述答案都没有奏效 . 我正在使用com.android.support:design:24.1.0
所以我只是将版本更改为24.1.1
. 在gradle sync之后,它再次工作,异常消失了 . 在我看来,问题在于一些旧版本的设计支持库 .只是把它放在这里以防其他答案对某些人不起作用 .
在我的例子中,我用ApplicationContext来扩展视图 . 当您使用ApplicationContext时,未应用主题/样式,因此虽然我的样式中有Theme.Appcompat,但它未应用并导致此异常 . 更多细节:Theme/Style is not applied when inflater used with ApplicationContext
我对SectionsPagerAdapter和ViewPager&Fragment的活动