我为什么收到这个"你需要在这个活动中使用Theme.AppCompat主题(或后代)"错误?

时间:2017-01-09 17:12:04

标签: android

我遇到了一个新活动最令人沮丧的问题。我在" normal"中创建了它。方式:

Right-Click -> New -> Activity -> Empty Activity

但是当我尝试启动活动时,我收到了这个恼人的错误:

java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.

我觉得我的问题与StackOverflow上的其他问题不同,因为我已经在StackOverflow上进行了一些讨论以及一般的谷歌搜索,但是当有人试图打开一个对话框时,这些错误似乎会弹出当他们只是试图发起一项新活动时。

这是我的活动类 ViewAllStudents.java

public class ViewAllStudents extends AppCompatActivity {

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

我收到了setContentView(R.layout.activity_view_all_students);行的错误。

我的布局资源文件 activity_view_all_students.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/view_all_students_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

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

    <ListView
        android:id="@+id/student_row"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

</LinearLayout>

我的包含文件 student_table_header.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:background="@color/DARKOLIVEGREEN"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <TextView
        android:id="@+id/student_number_header"
        style="@style/StdTableHeader"
        android:layout_weight="1"
        android:text="@string/student_number_header"/>

    <TextView
        android:id="@+id/student_id_header"
        style="@style/StdTableHeader"
        android:text="@string/student_id_header"/>

    <TextView
        android:id="@+id/student_location_header"
        style="@style/StdTableHeader"
        android:text="@string/student_location_header"/>

    <TextView
        android:id="@+id/student_status_header"
        style="@style/StdTableHeader"
        android:text="@string/student_status_header"/>

    <TextView
        android:id="@+id/student_delete_header"
        style="@style/StdTableHeader"
        android:text="@string/student_injuries_header"/>

    <TextView
        android:id="@+id/student_deleted_header"
        style="@style/StdTableHeader"
        android:text="@string/student_deleted_header"/>

    <TextView
        android:id="@+id/student_last_modified"
        style="@style/StdTableHeader"
        android:text="@string/student_last_modified_header"/>

</LinearLayout>

最后,我的样式资源文件 styles.xml

<resources>
    <style name="StdTableHeader">
        <item name="android:textSize">14sp</item>
        <item name="android:paddingLeft">4dp</item>
        <item name="android:paddingRight">4dp</item>
        <item name="android:paddingTop">2dp</item>
        <item name="android:paddingBottom">2dp</item>
        <item name="android:layout_weight">10</item>
        <item name="android:layout_width">0dp</item>
        <item name="android:layout_height">wrap_content</item>
        <item name="android:textColor">@color/WHITE</item>
        <item name="android:textStyle">bold</item>
        <item name="android:textAllCaps">true</item>
        <item name="android:gravity">center</item>
    </style>
</resources>

我的 AndroidManifest.xml

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

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/app_icon"
        android:label="@string/app_name"
        android:supportsRtl="true">
        <activity
            android:name=".main.MainActivity"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar"
            android:windowSoftInputMode="adjustPan|stateHidden">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".forms.formOne"
            android:label="@string/form_one_header"
            android:theme="@style/AppTheme.NoActionBar"
            android:windowSoftInputMode="adjustPan|stateHidden" />
        <activity
            android:name=".forms.formTwo"
            android:label="@string/form_two_header"
            android:theme="@style/AppTheme.NoActionBar"
            android:windowSoftInputMode="adjustPan|stateHidden" />
        <activity
            android:name=".forms.formThree"
            android:label="@string/form_three_header"
            android:theme="@style/AppTheme.NoActionBar"
            android:windowSoftInputMode="adjustPan|stateHidden" />
        <activity
            android:name=".main.AddStudent"
            android:label="@string/title_activity_add_patient"
            android:theme="@style/AppTheme.NoActionBar" />

        <activity android:name=".main.ViewAllStudents"></activity>
    </application>

</manifest>

2 个答案:

答案 0 :(得分:1)

添加此属性

android:theme="@style/Theme.AppCompat.Light"

在活动代码中。

或者像以下

一样使用styles.xml
<resources>

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

</resources>

并在清单中添加此属性

android:theme="@style/AppTheme"

在应用程序标记中。

答案 1 :(得分:0)

好的...要简短回答,请检查您的AndroidManifest.xml文件。出于某种原因,AndroidStudio忽略了插入关键线:

android:theme="@style/AppTheme.NoActionBar"

AndroidStudio已经为我创建的所有其他活动插入了这一行,除了这一行。

感谢所有花时间提供帮助并且容忍我无知的人。