错误您需要将 Theme.AppCompat 主题(或后代)与活动一起使用

Posted

技术标签:

【中文标题】错误您需要将 Theme.AppCompat 主题(或后代)与活动一起使用【英文标题】:Error You need to use a Theme.AppCompat theme (or descendant) with activity 【发布时间】:2019-01-30 06:44:37 【问题描述】:

我正在开发 anroid 应用程序,因为它使用深色操作栏运行良好,但是当我将其更改为无操作栏时,应用程序崩溃并在 logcat 中向我显示此错误。

我已经对样式和 xml 文件进行了更改,但仍然是同样的问题。当我再次向 Dark 操作栏添加广告时,它开始正常工作。

我研究过的链接

Link1

这是我的样式文件

<resources>
<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="android:textColor">@color/colorText</item>
    <item name="android:textColorHint">@color/colorText</item>
    <item name="colorControlNormal">@color/colorText</item>
    <item name="colorControlActivated">@color/colorText</item>
</style>

<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>

这是清单文件

<?xml version="1.0" encoding="utf-8"?>

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity
        android:name=".activities.SplashActivity"
        android:screenOrientation="portrait">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name=".activities.WelcomeActivity"
        android:screenOrientation="portrait" />
    <activity
        android:name=".activities.LoginActivity"
        android:screenOrientation="portrait" />
    <activity
        android:name=".activities.RegisterActivity"
        android:screenOrientation="portrait" />
    <activity
        android:name=".activities.UsersListActivity"
        android:screenOrientation="portrait" />
</application>

【问题讨论】:

如果您使用的是 AppTheme,请尝试将 LoginActivity extends AppCompatActivity 替换为 LoginActivity extends Activity 我正在尝试一下 我没明白你的意思,请你让我明白...? 我们在您的 LoginActivity 类中添加主题或在声明您的登录活动的清单中添加主题 这会产生更多问题,它说创建 getter 并在创建的方法下显示红线 【参考方案1】:

解决方案是将 Java 继承从 ActionBarActivity 更改为 Activity 并将对话框主题保留在清单中,非 Theme.AppCompat 值

在您的情况下,问题在于您没有在活动标签内指定 android:theme="@style/AppTheme.NoActionBar" 的清单文件

转到您的清单文件并将启动活动替换为:

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

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

在您的启动活动类中执行以下操作:

public class SplashActivity extends AppCompatActivity

【讨论】:

Theme.AppCompat 值实际定位在哪里?? 我已经改变了继承,但是随着我的改变它在已经创建的方法下显示了红线 @ziikhankhan 您需要向我们展示您遇到的关于红线的详细错误,您需要截屏并向我们展示 当我将类型迁移到 app.appcompatactivity 时,它显示错误错误:找不到符号方法 getSupportActionBar() 问题不在您的登录活动类中,您的 logcat 显示问题在于启动活动

以上是关于错误您需要将 Theme.AppCompat 主题(或后代)与活动一起使用的主要内容,如果未能解决你的问题,请参考以下文章

Theme.AppCompat无全屏主题解决办法

Android 如何获取支持操作栏的 AppCompat.Translucent 类型主题?

Android : Theme.Holo VS Theme.AppCompat

细说 AppCompat 主题引发的坑:You need to use a Theme.AppCompat theme with this activity!

Activity的主题是Theme.AppCompat.Light.NoActionBar,调用Activity的setTitle结果是啥?

如何使用主题和 Theme.AppCompat.DayNight 更改操作栏中的文本颜色