[英]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: 例如,其中一些无效:
android:theme="@style/Theme.AppCompat.Light"
to the application tag in the AndroidManifest.xml file. android:theme="@style/Theme.AppCompat.Light"
添加到AndroidManifest.xml文件中的应用程序标签。 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.