【发布时间】:2015-03-20 18:54:52
【问题描述】:
在我的styles.xml - values 文件夹下:
<style name="CustomActionBarTheme" parent="@style/Theme.AppCompat">
<item name="android:actionBarStyle">@style/MyActionBar</item>
<item name="android:actionOverflowButtonStyle">@style/MyActionBar</item>
<item name="android:windowBackground">@android:color/white</item>
<item name="drawerArrowStyle">@style/DrawerArrowStyle</item>
</style>
<style name="DrawerArrowStyle" parent="Widget.AppCompat.DrawerArrowToggle">
<item name="spinBars">true</item>
<item name="color">@android:color/white</item>
</style>
<!-- Overflow menu -->
<!-- ActionBar styles -->
<style name="MyActionBar" parent="@android:style/Widget.Holo.Light.ActionBar">
<item name="android:background">#2E6154</item>
<item name="android:windowActionBarOverlay">true</item>
<item name="android:icon">@android:color/transparent</item>
<item name="android:src">@drawable/ic_overflow</item>
<item name="android:actionButtonStyle">@style/MyActionButtonStyle</item>
<item name="android:titleTextStyle">@style/MyTheme.ActionBar.TitleTextStyle</item>
</style>
<style name="MyTheme.ActionBar.TitleTextStyle" parent="@android:style/TextAppearance.Holo.Widget.ActionBar.Title">
<item name="android:textColor">#FFFFFF</item>
</style>
<style name="MyActionButtonStyle" parent="@android:style/Widget.ActionButton">
<item name="android:minWidth">0dip</item>
<item name="android:paddingLeft">0dip</item>
<item name="android:paddingRight">0dip</item>
</style>
在清单文件中:
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="18" />
<application
android:allowBackup="true"
android:hardwareAccelerated="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/CustomActionBarTheme" >
我也怀疑罪魁祸首是parent="@style/Theme.AppCompat",但找不到参考。
但是,当我在 5.0.1 上运行应用程序时,样式没有效果。 我想我可能也必须在 values-14 文件夹中更改它,但在此之前我尝试在 4.0.1 设备上运行该应用程序,但没有效果。我在这里想念什么?
我之前使用的是 Holo Light 主题,一切正常,一旦我将主题更改为 AppCompact,自定义似乎丢失了。我在这里想念什么?
编辑
如果我将主题更改为:
<style name="CustomActionBarTheme" parent="@android:style/Theme.Holo.Light">
我得到以下信息:
03-20 15:01:34.433: E/AndroidRuntime(9647): Process: com.exa, PID: 9647
03-20 15:01:34.433: E/AndroidRuntime(9647): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.exa/com.exa.MainActivity}: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
03-20 15:01:34.433: E/AndroidRuntime(9647): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)
03-20 15:01:34.433: E/AndroidRuntime(9647): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
03-20 15:01:34.433: E/AndroidRuntime(9647): at android.app.ActivityThread.access$800(ActivityThread.java:144)
03-20 15:01:34.433: E/AndroidRuntime(9647): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
03-20 15:01:34.433: E/AndroidRuntime(9647): at android.os.Handler.dispatchMessage(Handler.java:102)
03-20 15:01:34.433: E/AndroidRuntime(9647): at android.os.Looper.loop(Looper.java:135)
03-20 15:01:34.433: E/AndroidRuntime(9647): at android.app.ActivityThread.main(ActivityThread.java:5221)
03-20 15:01:34.433: E/AndroidRuntime(9647): at java.lang.reflect.Method.invoke(Native Method)
03-20 15:01:34.433: E/AndroidRuntime(9647): at java.lang.reflect.Method.invoke(Method.java:372)
03-20 15:01:34.433: E/AndroidRuntime(9647): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
03-20 15:01:34.433: E/AndroidRuntime(9647): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
03-20 15:01:34.433: E/AndroidRuntime(9647): Caused by: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
03-20 15:01:34.433: E/AndroidRuntime(9647): at android.support.v7.app.ActionBarActivityDelegate.onCreate(ActionBarActivityDelegate.java:152)
03-20 15:01:34.433: E/AndroidRuntime(9647): at android.support.v7.app.ActionBarActivityDelegateBase.onCreate(ActionBarActivityDelegateBase.java:149)
03-20 15:01:34.433: E/AndroidRuntime(9647): at android.support.v7.app.ActionBarActivity.onCreate(ActionBarActivity.java:123)
03-20 15:01:34.433: E/AndroidRuntime(9647): at com.exa.MainActivity.onCreate(MainActivity.java:428)
03-20 15:01:34.433: E/AndroidRuntime(9647): at android.app.Activity.performCreate(Activity.java:5933)
03-20 15:01:34.433: E/AndroidRuntime(9647): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
03-20 15:01:34.433: E/AndroidRuntime(9647): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)
03-20 15:01:34.433: E/AndroidRuntime(9647): ... 10 more
【问题讨论】:
-
你的 minSDKVersion 是多少?
-
<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="18" /> -
如果您正在开发 14 版本,为什么要使用 @style/Theme.AppCompat。使用 Theme.Holo。请关注developer.android.com/training/basics/actionbar/styling.html
-
我正在使用导航抽屉上的切换图标,除了导入 app-compactv7 库之外别无他法。为此,我必须从 ActionBar 活动扩展我的 navdrawer 活动,扩展意味着我从 AppCOmpact 主题扩展此活动的主题。
-
是的,将所有
Theme.AppCompat更改为Theme.Holo