简体   繁体   English

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

[英]Unable to start MainActivity - You need to use a Theme.AppCompat theme (or descendant) with this activity

My app works when I run it on my phone through Android Studio (Debug). 通过Android Studio(调试)在手机上运行该应用程序后,该应用程序即可运行。

But whenever I try to create a signed release APK and install the release APK on my phone it crashes immediately with this error in the logcat: 但是,每当我尝试创建签名的发行版APK并在手机上安装发行版APK时,它都会立即崩溃,并在logcat中出现此错误:

java.lang.IllegalStateException You need to use a Theme.AppCompat theme (or descendant) with this activity java.lang.IllegalStateException您需要在此活动中使用Theme.AppCompat主题(或后代)

According to logcat the error happens during the MainActivity's onCreate method. 根据logcat的说法,该错误发生在MainActivity的onCreate方法中。

I've looked at many StackOverflow threads and other websites & forums trying solutions, but none of them have worked for me so far. 我看过许多StackOverflow线程以及其他尝试解决方案的网站和论坛,但到目前为止,它们都没有为我工作。

For example, some of them that didn't work: 例如,其中一些无效:

  • Adding android:theme="@style/Theme.AppCompat.Light" to the application tag in the AndroidManifest.xml file. android:theme="@style/Theme.AppCompat.Light"添加到AndroidManifest.xml文件中的应用程序标签。
  • Changing the name of the app's theme (default is AppTheme) 更改应用程序主题的名称(默认为AppTheme)
  • Using Activity instead of AppCompatActivity ( I must use AppCompatActivity for this ) 使用Activity而不是AppCompatActivity( 为此我必须使用AppCompatActivity

All my Activity .java classes extend AppCompatActivity, and my AppTheme extends Theme.AppCompat.Light.DarkActionBar so I have no idea why this is happening. 我所有的Activity .java类都扩展了AppCompatActivity,而我的AppTheme扩展了Theme.AppCompat.Light.DarkActionBar,所以我不知道为什么会这样。

Here's the code (hopefully this is all the relevant code): 这是代码(希望这是所有相关代码):

(note: there is only values/styles.xml, no values-11, values-14, etc.) (注意:只有values / styles.xml,没有values-11,values-14等)

styles.xml: styles.xml:

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <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" />

AndroidManifest.xml: AndroidManifest.xml:

 <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="org.drawsmile.mealsonandroid" >

        <!--
             The ACCESS_COARSE/FINE_LOCATION permissions are not required to use
             Google Maps Android API v2, but you must specify either coarse or fine
             location permissions for the 'MyLocation' functionality. 
        -->

        <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
        <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

        <application
            android:name="android.support.multidex.MultiDexApplication"
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name" >
            android:supportsRtl="true"

            android:theme="@style/AppTheme"
            <activity android:name=".MainActivity" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />

                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
            <!--
                 The API key for Google Maps-based APIs is defined as a string resource.
                 (See the file "res/values/google_maps_api.xml").
                 Note that the API key is linked to the encryption key used to sign the APK.
                 You need a different API key for each encryption key, including the release key that is used to
                 sign the APK for publishing.
                 You can define the keys for the debug and release targets in src/debug/ and src/release/. 
            -->
            <meta-data
                android:name="com.google.android.geo.API_KEY"
                android:value="@string/google_maps_key" />

            <activity
                android:name=".MapsActivity"
                android:label="@string/title_activity_maps" />
            <activity android:name=".AuthenticationActivity"/>

            <service android:name=".FirebaseCMService" >
                <intent-filter>
                    <action android:name="com.google.firebase.MESSAGING_EVENT" />
                </intent-filter>
            </service>
        </application>

    </manifest>

activity_main.xml: activity_main.xml:

android:id="@+id/main_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context="org.drawsmile.mealsonandroid.MainActivity">

<android.support.design.widget.AppBarLayout
    android:id="@+id/appbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/AppTheme.AppBarOverlay"
    android:paddingTop="0dp">

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

    </android.support.v7.widget.Toolbar>

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

<android.support.v4.view.ViewPager
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior">

    <android.support.v4.view.PagerTitleStrip
        android:id="@+id/pager_title_strip"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="top"
        android:background="@android:color/holo_red_light"
        android:textColor="#fff"
        android:paddingTop="8dp"
        android:paddingBottom="8dp" />

</android.support.v4.view.ViewPager>

MainActivity.java MainActivity.java

package org.drawsmile.mealsonandroid;

...

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;

...

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

...

}

In your Manifest you are applying theme outside of application tag see below. Manifest您要在application标签之外应用主题,请参见下文。

<application
        android:name="android.support.multidex.MultiDexApplication"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name" >
        android:supportsRtl="true"

        android:theme="@style/AppTheme"

change it to this 改成这个

<application
        android:name="android.support.multidex.MultiDexApplication"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name" 
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

In your styles.xml replace , edit the AppTheme 在您的styles.xml替换中,编辑AppTheme

"Theme.AppCompat.Light.DarkActionBar" “主题.AppCompat.Light.DarkActionBar”

by 通过

"Theme.AppCompat.Light.NoActionBar" “主题.AppCompat.Light.NoActionBar”

, this should solve your problem. ,这应该可以解决您的问题。

The reason is, you are trying to override an actionbar(probably) but the app already has actionbar. 原因是,您正在尝试覆盖操作栏(可能),但是该应用程序已经具有操作栏。 Hope it helps 希望能帮助到你

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 问题与您需要与此活动一起使用Theme.AppCompat主题(或后代)与该活动一起Theme.AppCompat主题(或后代)” - Issue with You need to use a Theme.AppCompat theme (or descendant) with this activity Theme.AppCompat theme (or descendant) with this activity" 错误:您需要在此活动中使用Theme.AppCompat主题(或后代) - Error: You need to use a Theme.AppCompat theme (or descendant) with this activity 在 android 中具有自定义主题的应用程序,错误:您需要在此活动中使用 Theme.AppCompat 主题(或后代) - app with custom theme in android, error: You need to use a Theme.AppCompat theme (or descendant) with this activity java.lang.IllegalStateException:您需要在此活动中使用Theme.AppCompat主题(或后代) - java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity java.lang.IllegalStateException您需要在此活动中使用Theme.AppCompat主题(或后代) - java.lang.IllegalStateException You need to use a Theme.AppCompat theme (or descendant) with this activity 如何解决:IllegalStateException:您需要在此活动中使用 Theme.AppCompat 主题(或后代) - How to solve: IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity java.lang.IllegalStateException:此活动需要使用Theme.AppCompat主题(或后代) - java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity 如何解决:java.lang.IllegalStateException:您需要在此活动中使用 Theme.AppCompat 主题(或后代)? - How to resolve: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity? Robolectric:IllegalStateException:您需要在此活动中使用 Theme.AppCompat 主题(或后代) - Robolectric: IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity 错误消息:您需要与此活动一起使用Theme.AppCompat主题 - Error Message: You need to use a Theme.AppCompat theme with this activity
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM