【问题标题】:java.lang.IllegalArgumentException: AppCompat does not support the current theme featuresjava.lang.IllegalArgumentException:AppCompat 不支持当前主题功能
【发布时间】:2015-06-29 07:37:20
【问题描述】:

我尝试将项目从 Eclipse 迁移到 Android Studio。最后我能够运行它,但在某个时候我得到了这个异常,我在谷歌中没有发现任何关于这个:

04-22 00:08:15.484    9891-9891/hu.illion.kwindoo E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{hu.illion.kwindoo/hu.illion.kwindoo.activity.MainActivity}: java.lang.IllegalArgumentException: AppCompat does not support the current theme features
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2092)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2117)
    ...    
Caused by: java.lang.IllegalArgumentException: AppCompat does not support the current theme features
    at android.support.v7.app.AppCompatDelegateImplV7.ensureSubDecor(AppCompatDelegateImplV7.java:360)
    at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:246)
    at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:106)
    at hu.illion.kwindoo.activity.MainActivity.onCreate(MainActivity.java:73)
    at android.app.Activity.performCreate(Activity.java:5047)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2056)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2117)
    ...

73. MainActivity 的行是:

setContentView(R.layout.activity_main);

如果可以的话,请给我建议。

【问题讨论】:

标签: java android eclipse android-studio


【解决方案1】:

替代@sbaar 的答案,

windowActionBar 保留为false 并添加windowNoTitle 并将其设置为true

   <item name="windowActionBar">false</item>
   <item name="windowNoTitle">true</item>

【讨论】:

  • 今天更新到最新的 appcompt (22.1) 后,我必须对我的应用执行此操作。这就是我所做的全部更改,我的应用现在可以再次运行。
  • 这很奇怪,但在切换 ActionBarActivity -> AppCompatActivity 后有效
  • 这个答案对我不起作用。只有@sbaar 答案有效。您的主题应该继承自:Theme.AppCompat.NoActionBar 除了那些:falsetrue
  • 这适用于在NoActionBar 风格中没有替代品的主题。在我的示例中,它适用于 Theme.AppCompat.Light.Dialog
  • 这在从 Theme.AppComapt.NoActionBar 继承时有效。完美!
【解决方案2】:

删除

<item name="windowActionBar">false</item>

从您的主题,然后确保您从 .NoActionBar 主题继承,然后像正常一样设置您的工具栏。

【讨论】:

  • 我为什么要修改一个东西?几个月来,这个项目在 Eclipse 中运行得非常好。
  • 因为几个小时前 Google 发布了他们的 22.1 版支持库,导致您的项目(以及我的项目)出现此问题。这只是一个巧合,不是因为迁移到 Android Studio。
  • 对我来说,从 .NoActionBar 继承主题是关键,不需要移除元素。
【解决方案3】:

确保您的主题是来自Theme.AppCompat.NoActionBar 的子主题,然后是styles.xml

<style name="MyMaterialTheme" parent="Theme.AppCompat.NoActionBar">
        <item name="windowNoTitle">true</item>
        ...
</style>

顺便说一句,这是支持库 22.1 的新问题。

【讨论】:

【解决方案4】:

检查您是否在super.onCreate() 之后而不是之前调用setContentView()。这对我有帮助。

【讨论】:

  • 有 windowNoTitle 和 windowActionBar 但仍然没有工作。这为我修好了。谢谢!
【解决方案5】:

在 Style.xml 中使用这个父级 parent="Theme.AppCompat.Light.NoActionBar"

【讨论】:

【解决方案6】:

在我的情况下,我没有更改为 .NoActionBar 主题。我只是从这个项目中删除了 android 前缀。

<item name="windowActionBar">false</item>

错误消失了。

【讨论】:

  • 别提了。很高兴看到您的评论。
【解决方案7】:

确保

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

在这对我有用的一切中都是最重要的......祝你好运

【讨论】:

    【解决方案8】:

    如果您添加了&lt;item name="windowActionBar"&gt;false&lt;/item&gt;, 然后,你需要添加

    <item name="windowNoTitle">true</item>
    

    解决问题。

    【讨论】:

      【解决方案9】:

      像这样添加对gradle的依赖

      compile 'com.android.support:appcompat-v7:21.0.3'
      

      【讨论】:

        【解决方案10】:

        我通过扩展 AppCompatActivity 的主 Activity 解决了这个问题 :)

        【讨论】:

          【解决方案11】:

          我遇到了同样的问题,从我的 syles.xml 中删除了android:,如下所示;

           <!-- caused crash -->
           <item name="android:windowActionBar">false</item>
           <item name="android:windowNoTitle">true</item>
          
           <!-- didn't cause crash -->
           <item name="windowActionBar">false</item>
           <item name="windowNoTitle">true</item>
          

          【讨论】:

            【解决方案12】:

            当我将库版本从 22.0.0 升级到 22.1.1 并通过回退到以前的版本来修复它时遇到了同样的问题:com.android.support:appcompat-v7:22.0.0 并返回根据新版本的兼容性库的要求,在我的 Activity 类中使​​用 ActionBarActivity,而不是 AppCompatActivity。我稍后再试。

            【讨论】:

              【解决方案13】:

              只需在您的 style.xml 中使用它,无需其他编辑

               <style name="AppTheme" parent="Theme.AppCompat">
              
              <!-- theme customizations -->
              
              <item name="colorPrimary">@color/colorPrimary</item>
              <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
              <item name="colorAccent">@color/colorAccent</item>
              </style>
              

              不要在活动文件中添加任何内容,请留下

              public class Main extends ActionBarActivity {
              
              @Override
              protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
              
               }
              
              @Override
              public boolean onCreateOptionsMenu(Menu menu) {
              // Inflate the menu; this adds items to the action bar if it is present.
              getMenuInflater().inflate(R.menu.main, menu);
              return true;
              } 
              
              @Override
               public boolean onOptionsItemSelected(MenuItem item) {
              // Handle action bar item clicks here. The action bar will
              // automatically handle clicks on the Home/Up button, so long
              // as you specify a parent activity in AndroidManifest.xml.
              int id = item.getItemId();
              if (id == R.id.action_settings) {
                  return true;
              }
              return super.onOptionsItemSelected(item);
              }
              
               }
              

              【讨论】:

                【解决方案14】:

                在 Java 类中将 Main extends ActionBarActivity 更改为 Main extends Activity。它对我有用。

                【讨论】:

                  【解决方案15】:

                  就我而言,我在寻找@rewrihitesh 的答案,我注意到我颠倒了元素顺序。从改变

                  setContentView(R.layout.activity_test);
                  super.onCreate(savedInstanceState);
                  

                  super.onCreate(savedInstanceState);
                  setContentView(R.layout.activity_test);
                  

                  解决我的问题。

                  希望对你有帮助!!

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 2015-08-20
                    • 1970-01-01
                    • 2015-11-16
                    • 2017-12-08
                    • 2018-01-20
                    • 2017-08-07
                    • 1970-01-01
                    相关资源
                    最近更新 更多