报错:You need to use a Theme.AppCompat theme (or descendant) with this activity.

学习 Activity 生命周期时希望通过 Dialog 主题测试 onPause() 和 onStop() 的区别,点击按钮跳转 Activity 时报错:

E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: com.example.activitylifecycletest, PID: 2920
                  java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.activitylifecycletest/com.example.activitylifecycletest.DialogActivity}: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646)
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)
                      at android.app.ActivityThread.-wrap12(ActivityThread.java)
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)
                      at android.os.Handler.dispatchMessage(Handler.java:102)
                      at android.os.Looper.loop(Looper.java:154)
                      at android.app.ActivityThread.main(ActivityThread.java:6077)
                      at java.lang.reflect.Method.invoke(Native Method)
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
                   Caused by: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
                      at android.support.v7.app.AppCompatDelegateImplV9.createSubDecor(AppCompatDelegateImplV9.java:347)
                      at android.support.v7.app.AppCompatDelegateImplV9.ensureSubDecor(AppCompatDelegateImplV9.java:316)
                      at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:281)
                      at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:140)
                      at com.example.activitylifecycletest.DialogActivity.onCreate(DialogActivity.java:11)
                      at android.app.Activity.performCreate(Activity.java:6664)
                      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599)
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707) 
                      at android.app.ActivityThread.-wrap12(ActivityThread.java) 
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460) 
                      at android.os.Handler.dispatchMessage(Handler.java:102) 
                      at android.os.Looper.loop(Looper.java:154) 
                      at android.app.ActivityThread.main(ActivityThread.java:6077) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)

找到最有用的一句话,说明所使用的 theme 和当前 Activity 不匹配:

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

AndroidManifest.xml 中 activity 配置如下:

1 <activity
2     android:name=".DialogActivity"
3     android:theme="@android:style/Theme.Dialog">
4 </activity>

根据报错提示改为 AppCompat 主题即可:

1 <activity
2     android:name=".DialogActivity"
3     android:theme="@style/Theme.AppCompat.Dialog">
4 </activity>

查看 java 代码后发现我的 Activity 继承 AppCompatActivity 类。在 Android Studio 中创建 Activity 时,如果勾选了 Backwards Compatibility(AppCompat) 选项,所创建的 Activity 会继承 AppCompatActivity 而不是 Activity,此时需要使用对应的 AppCompat 主题。

java 代码:

 1 import android.support.v7.app.AppCompatActivity;
 2 import android.os.Bundle;
 3 
 4 public class DialogActivity extends AppCompatActivity {
 5 
 6     @Override
 7     protected void onCreate(Bundle savedInstanceState) {
 8         super.onCreate(savedInstanceState);
 9         setContentView(R.layout.activity_dialog);
10     }
11 
12 }

 

posted @ 2016-12-30 02:32  wangyanxiang-  阅读(46371)  评论(1编辑  收藏  举报