1

我为我的用户提供了一个明暗的主题选项。

日志中的错误:

Caused by: java.lang.IllegalStateException: 您必须使用Theme.Sherlock, Theme.Sherlock.Light, Theme.Sherlock.Light.DarkActionBar, 或派生词。

错误发生在setContentView(R.layout.activity_main);MainActivity 中。

主要活动

public class MainActivity extends SherlockFragmentActivity {.....public static int globalTheme;
Context context;
protected void onCreate(Bundle savedInstanceState) {


    context = getApplicationContext();
    mySharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);

    Editor editor = mySharedPreferences.edit();
    editor.putBoolean("proxy", false);
    editor.commit();

    if (mySharedPreferences.getString(Preferences.PREF_THEME, "1").trim().equals("1"))
        globalTheme = R.style.Sherlock___Theme;
    else
        globalTheme = R.style.Sherlock___Theme_Light;
    setTheme(globalTheme);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

我没有在清单中添加一些东西,因为主题应该动态更改 AndroidManifest.xml

<uses-sdk android:minSdkVersion="7"
   />

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:name="com.belasheuski.activities.MyApplication"
     >
    <activity
        android:name="com.belasheuski.activities.MainActivity"
        android:label="@string/name_main"
        android:screenOrientation="portrait" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

此错误发生在 API 7 上。在 API 15 上一切正常。

4

3 回答 3

1

我是这样设置的...

 setTheme(isLightTheme ? R.style.MyApp_Light : R.style.MyApp);

样式定义的样子...

 <style name="MyApp.Light" parent="@style/Theme.Sherlock.Light.ForceOverflow">
     <item name="overlayedActionBarBackground">@color/overlayedActionBarLight</item>

     ...
 </style>

 <style name="MyApp" parent="@style/Theme.Sherlock.ForceOverflow">
     <item name="overlayedActionBarBackground">@color/overlayedActionBarDark</item>

     ...
 </style>

这很好用。所以我认为您从 ABS 中获取了错误的样式定义。

干杯!

于 2013-02-26T20:20:54.757 回答
0

错误信息告诉你出了什么问题,你的主题必须是“Theme.Sherlock、Theme.Sherlock.Light、Theme.Sherlock.Light.DarkActionBar,或衍生”。

这发生在 API 7 上,但不是在 API 15 上,因为 API 15 具有本机 ActionBar 支持,所以使用它,而在 API 7 上不是这种情况,因此需要主题化。

于 2013-02-26T20:19:57.630 回答
0

从错误出发:

您必须使用 Theme.Sherlock、Theme.Sherlock.Light、Theme.Sherlock.Light.DarkActionBar 或衍生产品。”

您的自定义style似乎不是从Sherlock主题继承的。检查styles.xml文件values夹中的文件并确保它们继承自其中之一。

于 2013-02-26T20:22:08.453 回答