Android:真机调试遇到的问题(You need to use a Theme.AppCompat theme (or descendant) with this activity)。
在调试《第一行代码》这本书上的代码时,遇到了一个问题,有一个问题是想在一个活动中打开一个对话框,我按照书中的代码敲上去出了错。
我的机子是红米note,android版本是4.4.4。
错误是报:
Caused by: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
书上源码:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.cailu.activitylifecycletest"> <application
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>
<activity android:name=".NormalActivity" />
<activity android:name=".DialogActivity"
android:theme="@android:style/Theme.Dialog"></activity>
</application> </manifest>
我改为下面这样就好了:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.cailu.activitylifecycletest"> <application
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>
<activity android:name=".NormalActivity" />
<activity android:name=".DialogActivity"
android:theme="@style/Theme.AppCompat.Dialog"></activity>
</application> </manifest>
那么根本原因是什么呢?查看日志,发现:
On devices with API level below 21, a full build is required if the app is not running.
dalvikvm: Could not find class 'android.graphics.drawable.RippleDrawable', referenced from method android.support.v7.widget.AppCompatImageHelper.hasOverlappingRendering
其实,出现以上情况,是因为代码所调用的一些方法只能在较高的API level上使用,而调试用的机子或模拟器所用的SDK Version小于该API level。