You need to use a Theme.AppCompat theme (or descendant) with this activity解決方法
阿新 • • 發佈:2018-12-31
當我的MainActivity繼承自v7包中的ActionBarActivity或者AppCompatActivity時,如果在style.xml檔案中指定MainActivity所使用的樣式如下:
<style name="AppTheme" parent="android:Theme.Material.NoActionBar"> <!-- 5.0開始,可以在Style.xml檔案中統一配置App的樣式 --> <!-- 狀態列的顏色 --> <item name="colorPrimary">@color/colorPrimary</item> <!-- 一級文字的顏色 --> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <!-- 二級文字的顏色 --> <item name="colorAccent">@color/colorAccent</item> </style>
會報如下錯誤:
java.lang.IllegalStateException:You need to use a Theme.AppCompat theme(or descendatn) with this activity
那麼如何解決這個問題呢?網上很多人生說將MainActivity改為繼承自Activity即可,但是這樣的話就早晨無法相容老版本的樣式,或者說是無法再5.0之前的版本實現MaterialDesign的效果,那麼該如何正確的修改呢?
解決步驟如下:
1、res/styles.xml檔案中重新新增一個style樣式AppTheme.Base,然後將AppTheme繼承自AppTheme.Base,程式碼如下:
<resources> <!-- Base application theme. --> <style name="AppTheme" parent="AppTheme.Base"> <!-- Customize your theme here. --> </style> <style name="AppTheme.Base" parent="Theme.AppCompat.Light.NoActionBar"> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> <item name="android:windowBackground">@android:color/white</item> </style> </resources>
2、在res檔案中建立values-v21資料夾,然後在此資料夾下建立styles.xml檔案,程式碼如下:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="AppTheme" parent="AppTheme.Base">
<item name="android:colorPrimary">@color/colorPrimary</item>
<item name="android:colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="android:colorAccent">@color/colorAccent</item>
</style>
</resources>
說明:values-v21資料夾中的內容是專門針對API21以上的版本所使用的配置檔案,也就是說如果是API21之前的檔案就是使用res/values中的styles.xml,否則使用values-v21資料夾下的styles.xml通過以上兩步,就可以輕鬆實現MainActivity還是繼承自AppCompatActivity,也就是說可以將Material Design的效果執行在API21之前版本的手機上,並且API21之前的樣式和API21以後的樣式可以由我們自己決定