1. 程式人生 > >按照官網寫的第一個APP,出現了You need to use a Theme.AppCompat theme (or descendant) with this activity問題

按照官網寫的第一個APP,出現了You need to use a Theme.AppCompat theme (or descendant) with this activity問題

這是我第一次根據Android官網指導寫的APP,連結如下:

每一步都嚴格參照了官網指導,一步一步敲程式碼、執行,結果報瞭如下錯誤:

10-08 18:08:40.878 18503 18503 E AndroidRuntime: Caused by: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
10-08 18:08:40.878 18503 18503 E AndroidRuntime:        at android.support.v7.app.AppCompatDelegateImplV9.createSubDecor(AppCompatDelegateImplV9.java:354)
10-08 18:08:40.878 18503 18503 E AndroidRuntime:        at android.support.v7.app.AppCompatDelegateImplV9.ensureSubDecor(AppCompatDelegateImplV9.java:323)
10-08 18:08:40.878 18503 18503 E AndroidRuntime:        at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:284)
10-08 18:08:40.878 18503 18503 E AndroidRuntime:        at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:139)
10-08 18:08:40.878 18503 18503 E AndroidRuntime:        at com.huawei.anrdemo.DisplayMessageActivity.onCreate(DisplayMessageActivity.java:13)
10-08 18:08:40.878 18503 18503 E AndroidRuntime:        at android.app.Activity.performCreate(Activity.java:7372)
10-08 18:08:40.878 18503 18503 E AndroidRuntime:        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1218)
10-08 18:08:40.878 18503 18503 E AndroidRuntime:        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3147)
10-08 18:08:40.878 18503 18503 E AndroidRuntime:        ... 9 more

本地環境: Android Studio 3.0.1版本,APP 的 Gradle version是4.1,Android Plugin Version是3.0.1,Compile SDK Version是API 26,Min SDK Version是21,Target SDK Version是API 26,其餘引數都是預設。

首先,這個問題我沒有Google,也沒有去百度查,只從其報錯上思考了下,意思是說你的這個activity需要使用一個Theme.AppCompat主題或descendant(沒有去查這個descendant是什麼意思)

既然不懂descendant是什麼意思,那姑且就嘗試下 Theme.AppCompat 吧

由於官網定義的這個 DisplayMessageActivity 繼承的是 AppCompatActivity,然後我就嘗試在 AndroidManifest.xml 裡面將 DisplayMessageActivity 的定義增加了一個屬性 android:theme="@style/Theme.AppCompat",重新執行後果然成功。於是自己得出這個結論:

如果 activity 繼承的是 AppCompatActivity,那麼它在 AndroidManifest.xml 裡面需要設定一個 Theme.AppCompat 主題

那如果 activity 不繼承 AppCompatActivity 呢,然後我又把 DisplayMessageActivity 的定義改成了 extends Activity,並把AndroidManifest裡面的 Theme.AppCompat 去掉,同樣可以正常執行。

奇怪的是,明明按照官網一步一步敲的程式碼,為什麼官網沒有指出這裡的問題?

如果知道這個原因的大神,還請留言討論,謝謝。