app移植到appcompat v22.2.1会引发异常IllegalArgumentException:AppCompat不支持当前主题功能

时间:2016-01-14 10:51:45

标签: android android-layout android-appcompat

我必须使用材料设计将应用程序移植到Lollipop。当我运行移植的应用程序时,我有以下错误:

Caused by: java.lang.IllegalArgumentException: AppCompat does not support the current theme features
at android.support.v7.app.AppCompatDelegateImplV7.ensureSubDecor(AppCompatDelegateImplV7.java:363)
at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:246)
at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:106)

要移植应用程序,我使用Android Studio创建了一个实现工具栏和导航抽屉的项目。代码使用Activities的层次结构,我让上层基类继承自 AppCompatActivity 并实现 NavigationView.OnNavigationItemSelectedListener OnNavigationItemSelectedListener 为层次结构中的中间类返回true,最终子活动实现它。 Gradle没有提出错误。

对于主要活动,布局仅包含ListView和菜单项。我使用了Android Studio生成的默认布局,并在content_main.xml文件中设置了ListView。由于CoordinatorLayout不支持listView,当我实例化我添加的listView时(引用here

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    mListMain.setNestedScrollingEnabled(true);
}

我发现这个topic似乎在谈论同一个例外。但是我的样式文件遵循主题中的建议。

styles.xml:

<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

    <style name="AppTheme.NoActionBar">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
    </style>

    <style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />

    <style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />
</resources>

styles.xml(V21):

<resources>    
    <style name="AppTheme.NoActionBar">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
        <item name="android:windowDrawsSystemBarBackgrounds">true</item>
        <item name="android:statusBarColor">@android:color/transparent</item>
    </style>
</resources>

在使用 AppTheme AppTheme.NoActionBar 的Manifest中没有差异

MainActivity 中的 setContentView 行引发了异常,我的布局是Android Studio创建的布局,除了content_main文件

activity_main.xml中:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:openDrawer="start">

    <include
        layout="@layout/app_bar_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <android.support.design.widget.NavigationView
        android:id="@+id/nav_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:fitsSystemWindows="true"
        app:headerLayout="@layout/nav_header_main"
        app:menu="@menu/activity_main_drawer" />

</android.support.v4.widget.DrawerLayout>

app_bar_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:context="aklal.org.materialclient.MainActivity">

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:popupTheme="@style/AppTheme.PopupOverlay" />

    </android.support.design.widget.AppBarLayout>

    <include layout="@layout/content_main" />

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|end"
        android:layout_margin="@dimen/fab_margin"
        android:src="@android:drawable/ic_dialog_email" />

</android.support.design.widget.CoordinatorLayout>

content_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context="aklal.org.materialclient.MainActivity"
    tools:showIn="@layout/app_bar_main">

    <ListView
        android:id="@+id/listMainAct"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </ListView>
</RelativeLayout>

对于出了什么问题的任何想法?任何帮助都将受到高度赞赏

编辑:我不明白的是,即使我评论与listView相关的所有内容(布局和代码),仍然会引发异常

编辑:似乎问题来自代码,当我找到它时我会给出解决方案

1 个答案:

答案 0 :(得分:0)

基于此行 Appcompat不支持当前主题功能 .Appcompat版本在您的应用中使用不支持棒棒糖主题功能,因此只会引发异常。

您使用棒棒糖移植的应用程序但未使用正确版本的appcompat。而不是使用appcompat-v7:22.2.1。在gradle文件中使用以下依赖项并尝试。

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