【问题标题】:java.lang.RuntimeException Theme.Sherlockjava.lang.RuntimeException Theme.Sherlock
【发布时间】:2012-10-12 17:32:59
【问题描述】:

我已在 google play 上更新并看到此错误:

java.lang.RuntimeException: Unable to start activity 

ComponentInfo{com.jim2/com.jim2.SettingWidgetActivity}: java.lang.IllegalStateException: You must use Theme.Sherlock, Theme.Sherlock.Light, Theme.Sherlock.Light.DarkActionBar, or a derivative.
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1815)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1831)
at android.app.ActivityThread.access$500(ActivityThread.java:122)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1024)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:132)
at android.app.ActivityThread.main(ActivityThread.java:4123)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:491)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.IllegalStateException: You must use Theme.Sherlock, Theme.Sherlock.Light, Theme.Sherlock.Light.DarkActionBar, or a derivative.
at com.actionbarsherlock.internal.ActionBarSherlockCompat.generateLayout(ActionBarSherlockCompat.java:1007)
at com.actionbarsherlock.internal.ActionBarSherlockCompat.installDecor(ActionBarSherlockCompat.java:919)
at com.actionbarsherlock.internal.ActionBarSherlockCompat.setContentView(ActionBarSherlockCompat.java:853)
at com.actionbarsherlock.app.SherlockFragmentActivity.setContentView(SherlockFragmentActivity.java:251)
at com.jim2.SettingWidgetActivity.onCreate(SettingWidgetActivity.java:37)
at android.app.Activity.performCreate(Activity.java:4397)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1048)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1779)
... 11 more

我不明白为什么会出现此错误,因为它在我的设备上完美运行

有人有想法吗?

这是我的 Manifest.xml 的一部分

<application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/Theme.Sherlock" >

谢谢

【问题讨论】:

    标签: android themes actionbarsherlock runtimeexception


    【解决方案1】:

    不要使用android:theme="@style/Theme.Sherlock"

    OnCreate 中使用setTheme(R.style.Theme_Sherlock);

    例如

    @Override
    public void onCreate(Bundle savedInstanceState) {
        setTheme(R.style.Theme_Sherlock);
        super.onCreate(savedInstanceState);
    
        // What you want to do here
    }
    

    【讨论】:

    • 通常情况和我一样不是吗?
    • @jaumard 是的,您也可以这样做,但这不是必需的。您确实需要将 setTheme() 放在 OnCreate 中,否则它会崩溃。
    • 这是ActionBarSherlock 的要求。通常我为我想要复制到所有其他活动的所有代码制作一个 BaseActivity,然后从该 BaseActivity 扩展所有其他活动。因此,无论您的基本活动是什么,您都可以编写一次。
    • 来自官方的 ActionbarSherlock 文档:“主题应该在你的清单中为整个应用程序或基于每个活动定义。你也可以在调用 super 之前在每个活动的代码中定义主题。 onCreate(捆绑)”。 actionbarsherlock.com/theming.html
    • @JakeWharton 嘿,谢谢你的评论,杰克!您介意提供/链接一个显示正确方法的示例吗?因为我们很多人都坚持这一点,而这是迄今为止一直有效的最佳技巧。
    【解决方案2】:

    你可以让你的风格继承自 Theme.Sherlock

    <style name="MyAppTheme" parent="Theme.Sherlock">
    

    然后在清单中使用您的主题

    android:theme="@style/MyAppTheme"
    

    您不必在每个页面上都使用 setTheme,因为 Muz 说,当有更好的解决方案时,这似乎需要做很多工作,会标记上面的答案,但我不能!!

    【讨论】:

      【解决方案3】:

      我同意 matt_lethargic。在我的样式文件中是:

      <style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar">
      

      我的应用程序在我将其更改为后停止崩溃:

      <style name="AppBaseTheme" parent="Theme.Sherlock">
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多