您需要在此活动中使用Theme.AppCompat主题(或后代)

iodit 发布于 2019-04-30 android 最后更新 2019-04-30 17:23 67 浏览

Android Studio 0.4.5 用于创建自定义对话框的Android文档:http://developer.android.com/guide/topics/ui/dialogs.html 如果您想要自定义对话框,则可以将对话框显示为对话框而不是使用对话框API。只需创建一个活动并将其主题设置为Theme.Holo.Dialog <activity>清单元素:

<activity android:theme="@android:style/Theme.Holo.Dialog" >
但是,当我尝试这个时,我得到以下异常:
java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity
我支持以下内容,并且我不能在min中使用大于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>
像这样创建对话框是我正在跳跃的事情,因为我已经完成了布局。 任何人都可以告诉我如何解决这个问题?
已邀请:

nipsa

赞同来自:

您需要做的就是将android:theme="@style/Theme.AppCompat.Light"添加到AndroidManifest.xml文件中的应用程序标记中。

rsequi

赞同来自:

快速解决方案 在styles.xml中更改基本主题父级 替换

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<style name="AppTheme" parent="Theme.AppCompat">

adicta

赞同来自:

删除Library项目中的所有样式文件夹。

dut

赞同来自:

就这样做

getApplicationContext().getTheme().applyStyle(R.style.Theme_Mc, true);
在您的values / styles.xml中 加上这个
 <style  name="Theme.Mc" parent="Theme.AppCompat.Light.NoActionBar">
         <!-- ADD Your Styles  -->
</style>

dipsam

赞同来自:

在Android清单中,只需将活动主题更改为AppTheme,如下面的代码片段

<activity
  android:name=".MainActivity"
  android:label="@string/app_name"
  android:theme="@style/AppTheme">
</activity>

hiure

赞同来自:

这个对我有用:

<application
           android:allowBackup="true"
           android:icon="@mipmap/ic_launcher"
           android:label="@string/app_name"
           android:theme="@style/AppTheme" >
           <activity
               android:name=".MainActivity"
               android:label="@string/app_name"
               android:theme="@style/Theme.AppCompat.NoActionBar">
<intent-filter>
                   <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
               </intent-filter>
           </activity>
</application>

malias

赞同来自:

在我的情况下,我的res目录中没有values-v21文件。然后我创建它并在其中添加以下代码:

  <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

nsunt

赞同来自:

你有很多解决这个错误的方法。

  1. 您应该使用Activity或FragmentActivity而不是ActionbarActivity或AppCompatActivity
  2. 如果您想使用ActionbarActivity或AppCompatActivity,您应该将styles.xml Theme.Holo.xxxx更改为Theme.AppCompat.Light(如果需要,添加到DarkActionbar)
如果您不需要有关操作栏或AppCompat的高级属性,则无需使用Actionbar或AppCompat。

ut_et

赞同来自:

我也有这个问题以及我做了什么来修复它,并且仍然使用Holo主题是采取以下步骤: 首先我替换了这个导入:

import android.support.v7.app.AppCompatActivity;
与这一个:
import android.app.Activity;
然后改变我的扩展名:
public class MyClass extends AppCompatActivity {//...
对此:
public class MyClass extends Activity {//...
并且还必须更改此导入:
import android.support.v7.app.AlertDialog;
到这个导入:
import android.app.AlertDialog;
然后您可以在活动级别的清单中使用您的主题标记:
android:theme="@android:style/Theme.Holo.Dialog" />
最后,(除非您的项目中有其他类必须使用v7 appCompat),您可以清理并重建项目,也可以在应用程序级别的gradle构建文件中删除此条目:
compile 'com.android.support:appcompat-v7:23.2.1'
如果您的项目中有其他类必须使用v7 appCompat,那么只需清理并重建项目即可。

jfugit

赞同来自:

您之所以这样,是因为您希望将以前的sdk版本中的主题样式中的Material Design应用到21. ActionBarActivity需要AppTheme,如果您还想阻止自己对AppTheme进行自定义,则只需更改styles.xml(之前的sdk 21)所以这样,可以继承App Compat主题。

<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
为了这:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">

et_sed

赞同来自:

这是在片段中需要AlertDialog的时候

            AlertDialog.Builder adb = new AlertDialog.Builder(getActivity());
            adb.setTitle("My alert Dialogue \n");
            adb.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
//some code
} });
            adb.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
} });
            adb.show();

sest

赞同来自:

对我来说,Android SDK似乎无法找到样式定义。一切都正确连线,做一个简单的项目干净修复它为我。

nomnis

赞同来自:

转到你的风格并把父级

parent="Theme.AppCompat"
代替
parent="@android:style/Theme.Holo.Light"

ysit

赞同来自:

如果需要在style.xml上扩展ActionBarActivity:

<!-- Base application theme. -->
<style name="AppTheme" parent="AppTheme.Base"/>
<style name="AppTheme.Base" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
如果您将应用程序的主题设置为android:Theme.Material.Light而不是AppTheme.Base,那么您将获得“IllegalStateException:您需要使用此活动的Theme.AppCompat主题(或后代)”错误。

wnihil

赞同来自:

min sdk是10.ActionBar可从api级别11获得。因此对于10,您将使用支持库中的AppCompat,您需要使用Theme.AppCompat或其后代。 使用

android:theme="@style/Theme.AppCompat" >
更多信息 @ http://developer.android.com/guide/topics/ui/actionbar.html Eidt: 我可能误读了op post。 似乎操作需要具有活动主题的Dialog。因此,Bobbake4已经建议扩展Activity而不是ActionBarActivity。 还可以在下面的链接中查看@ Dialog属性 http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.4_r1/frameworks/base/core/res/res/values/themes.xml/

eomnis

赞同来自:

将您的主题样式父级更改为

 parent="Theme.AppCompat"
这对我有用......

oiusto

赞同来自:

注意:我原本打算将其作为答案,但进一步的测试表明,当从命令行使用maven构建时它仍然失败,所以我不得不编辑它成为一个问题! :-( 在我的情况下,当我收到此错误时,我已经在使用AppCompat主题并且错误没有多大意义。 我正在对我的android构建进行mavenizing。我已经依赖于applat的apklib和jar版本,因此:

    <!-- See https://github.com/mosabua/maven-android-sdk-deployer -->
        <dependency>
            <groupId>android.support</groupId>
            <artifactId>compatibility-v7-appcompat</artifactId>
            <version>${compatibility.version}</version>
            <type>apklib</type>
        </dependency>
<dependency>
            <groupId>android.support</groupId>
            <artifactId>compatibility-v7-appcompat</artifactId>
            <type>jar</type>
        </dependency>
<dependency>
            <groupId>android.support</groupId>
            <artifactId>compatibility-v7</artifactId>
            <type>jar</type>
        </dependency>
<dependency>
            <groupId>android.support</groupId>
            <artifactId>compatibility-v4</artifactId>
        </dependency>
现在,当我导入maven项目并从IntelliJ构建和运行时,它很好。 但是当我使用maven从命令行构建和部署并运行时,我仍然会遇到此异常。

weos

赞同来自:

我在三星设备上遇到了这样的崩溃,即使活动确实使用了Theme.AppCompat。 根本原因与三星方面的奇怪优化有关:

- if one activity of your app has theme not inherited from Theme.AppCompat
- and it has also `android:launchMode="singleTask"`
- then all the activities that are launched from it will share the same Theme
我的解决方案是删除android:launchMode="singleTask"

esaepe

赞同来自:

我的活动与SectionsPagerAdapter和ViewPager&分段

public class MyActivity extends AppCompatActivity implements ActionBar.TabListener
...
...
     @Override
        public void onPostResume(){
            super.onPostResume();
            try {
               getSupportActionBar().setDisplayShowTitleEnabled(false);
            }catch (NullPointerException ignored){
            }
        }

fet

赞同来自:

这对我有用,我刚改变了:

final AlertDialog.Builder builder = new AlertDialog.Builder(getApplicationContext());
对此:
final AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);

kquis

赞同来自:

我有同样的问题,但当我把它放在清单上时它解决了:android:theme =“@ style / Theme.AppCompat。

    <application
        android:allowBackup="true"
        android:icon="@drawable/icon"
        android:label="@string/app_name_test"
        android:supportsRtl="true"
        android:theme="@style/Theme.AppCompat">
...
</application>

pculpa

赞同来自:

这个解决方案对我有用。 设计库依赖于Support v4和AppCompat支持库,因此不要在gradle中为appcompat和设计库使用不同的版本。 使用

 compile 'com.android.support:appcompat-v7:23.0.0'
 compile 'com.android.support:design:23.0.0'
代替
 compile 'com.android.support:appcompat-v7:23.0.0'
 compile 'com.android.support:design:23.1.0'

het

赞同来自:

您遇到此问题的原因是您尝试应用对话框主题的活动是扩展ActionBarActivity,这需要应用AppCompat主题。 更新:扩展AppCompatActivity也会出现此问题 在这种情况下,将Java继承从ActionBarActivity更改为Activity,并将对话框主题保留在清单中,非Theme.AppCompat


一般规则是,如果您希望代码支持旧版本的Android,则应该具有AppCompat主题,并且Java代码应该扩展AppCompatActivity。如果你有一个不需要这种支持的活动,比如你只关心Android的最新版本和功能,你可以应用任何主题,但是java代码必须扩展普通的Activity
注意:当从AppCompatActivity(或子类,ActionBarActivity)更改为Activity时,还必须将具有“支持”的各种呼叫更改为相应的呼叫而不使用“支持”。因此,请调用getFragmentManager而不是getSupportFragmentManager

eomnis

赞同来自:

我遇到了这个问题,即使我的主题是一个AppCompat主题而我的活动是一个AppCompatActivity(或其他人的答案所建议的Activity)。所以我清理,重建并重新运行项目。 (构建 - >清理项目;构建 - >重建项目;运行 - >运行) 它可能看起来很愚蠢,但现在效果很好! 希望它有所帮助!

nautem

赞同来自:

在Android Studio中: 将支持库添加到gradle文件并同步。 编辑build.gradle(Module:app)以获得依赖关系,如下所示:

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.android.support:design:23.1.1'
compile 'com.android.support:support-v4:23.1.1'
}
我的支持库版本是23.1.1;使用适用的支持库版本。

gautem

赞同来自:

对我来说是使用ContextThemeWrapper的解决方案:

private FloatingActionButton getFAB() {
Context context = new android.support.v7.view.ContextThemeWrapper(getContext(), R.style.AppTheme);
FloatingActionButton fab = new FloatingActionButton(context);
return fab;}
来自Android - How to create FAB programmatically?

uut

赞同来自:

这就是为我解决的问题:我没有在清单中指定主题,而是在onCreate中为每个扩展ActionBarActivity的活动定义了它:

@Override
protected void onCreate(Bundle savedInstanceState) {
    setTheme(R.style.MyAppTheme);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.my_activity_layout);
...
}
MyAppThemeTheme.AppCompat的后代,在xml中定义。请注意,必须在super.onCreatesetContentView之前设置主题。

eomnis

赞同来自:

对于我的Xamarin Android项目(在MainActivity.cs中),我改变了......

public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsApplicationActivity
......错误消失了。我意识到这不是每个人的解决方案,但它可能提供潜在问题的线索。

mest

赞同来自:

更改所需活动的主题。它的工作对我来说

<activity
            android:name="HomeActivity"
            android:screenOrientation="landscape"
            android:theme="@style/Theme.AppCompat.Light"
            android:windowSoftInputMode="stateHidden" />

adolor

赞同来自:

在上面的评论中从@MarkKeen复制答案,因为我遇到了同样的问题。 我在帖子顶部说明了错误,并在我添加了一个警告对话框后发生了。我在清单中有所有相关的样式信息。通过更改警报生成器中的上下文引用来解决我的问题 - 我更改了:

new android.support.v7.app.AlertDialog.Builder(getApplicationContext())
至:
new android.support.v7.app.AlertDialog.Builder(this)
没有更多的问题。

mest

赞同来自:

如果有人仍然想知道这个问题。 尝试这个 :

new android.support.v7.app.AlertDialog.Builder(this)

qea

赞同来自:

对我来说,通过在我的customDialog类中将AppCompatActivity的继承更改为Activity来解决问题。 Theme.Dialog的清单中无需更改。

seaque

赞同来自:

您的Activity正在扩展ActionBarActivity,需要应用AppCompat.theme。 从ActionBarActivity更改为Activity或FragmentActivity,它将解决问题。

If you use no Action bar then :
android:theme="@android:style/Theme.Light.NoTitleBar.Fullscreen" 

yut

赞同来自:

对我来说,即使我将Theme.AppCompat作为应用程序的基本主题,上述答案也都无效。我正在使用com.android.support:design:24.1.0所以我只是将版本更改为24.1.1。在gradle sync之后,它再次工作,异常消失了。在我看来,问题在于一些旧版本的设计支持库。 只是把它放在这里以防其他答案对某些人不起作用。

gsint

赞同来自:

我遇到了同样的问题。因为我正在创建自定义导航抽屉。但我忘记在我的清单中提到这样的主题 机器人:主题= “@风格/ Theme.AppCompat.NoActionBar” 一旦我将上面的主题添加到我的清单中,它解决了问题。