【问题标题】:Custom theme not taking effect (Android)自定义主题不生效(Android)
【发布时间】: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,自定义似乎丢失了。我在这里想念什么?

编辑

如果我将主题更改为: &lt;style name="CustomActionBarTheme" parent="@android:style/Theme.Holo.Light"&gt;

我得到以下信息:

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 是多少?
  • &lt;uses-sdk android:minSdkVersion="14" android:targetSdkVersion="18" /&gt;
  • 如果您正在开发 14 版本,为什么要使用 @style/Theme.AppCompat。使用 Theme.Holo。请关注developer.android.com/training/basics/actionbar/styling.html
  • 我正在使用导航抽屉上的切换图标,除了导入 app-compactv7 库之外别无他法。为此,我必须从 ActionBar 活动扩展我的 navdrawer 活动,扩展意味着我从 AppCOmpact 主题扩展此活动的主题。
  • 是的,将所有 Theme.AppCompat 更改为 Theme.Holo

标签: android android-actionbar


【解决方案1】:

你在样式上有很多错误,要使用 appcompact 主题你必须这样做:

<style name="CustomActionBarTheme" parent="@style/Theme.AppCompat">
    <item name="actionBarStyle">@style/MyActionBar</item>
    <item name="actionOverflowButtonStyle">@style/MyActionBar</item>
    <item name="drawerArrowStyle">@style/DrawerArrowStyle</item>
</style>

<style name="DrawerArrowStyle" parent="@style/Widget.AppCompat.DrawerArrowToggle">
    <item name="spinBars">true</item>
    <item name="color">..</item>
</style>

<!-- Overflow menu -->
<!-- ActionBar styles -->
<style name="MyActionBar" parent="@style/Widget.AppCompat.ActionBar">
    <item name="background">..</item>
    <item name="windowActionBarOverlay">true</item>
    <item name="icon">..</item>
    <item name="actionButtonStyle">@style/MyActionButtonStyle</item>
    <item name="titleTextStyle">@style/MyTheme.ActionBar.TitleTextStyle</item>
</style>

<style name="MyTheme.ActionBar.TitleTextStyle" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title">
    <item name="android:textColor">..</item>
</style>

<style name="MyActionButtonStyle" parent="@style/Widget.AppCompat.ActionButton">
    <item name="android:minWidth">0dip</item>
    <item name="android:paddingLeft">0dip</item>
    <item name="android:paddingRight">0dip</item>
</style>

【讨论】:

  • 嗨,哈利,谢谢。我花了一段时间才弄清楚这一点。我现在发现设置文本颜色的问题。我会试试你的代码:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-18
  • 1970-01-01
相关资源
最近更新 更多