Android自定义操作栏

时间:2015-03-03 00:50:27

标签: java android android-actionbar themes

我正在尝试在Android应用程序中自定义操作栏。

我关注google tutorial

但它不起作用。

这是我的themes.xml的代码

<?xml version="1.0" encoding="utf-8"?>

<color name="custom_white_color">#ffffff</color>
<color name="custom_blue_color">#2E4372</color>

<style name="CustomActionBarTheme" parent="@android:style/Theme.Holo.Light.DarkActionBar">
    <item name="android:actionBarStyle">@style/MyActionBar</item>
    <item name="actionBarStyle">@style/MyActionBar</item>
</style>

<style name="MyActionBar"
    parent="@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse">
    <item name="android:background">@color/custom_white_color</item>
</style>

在“AndroidManifest”中,我正在为应用程序调用此主题

android:theme="@style/CustomActionBarTheme" >

但是当我执行此代码时会发生以下错误

03-03 00:44:43.456    2467-2467/br.com.lzl.colorlist E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: br.com.lzl.colorlist, PID: 2467
java.lang.RuntimeException: Unable to start activity ComponentInfo{br.com.lzl.colorlist/br.com.lzl.colorlist.HomeActivity}: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
        at android.app.ActivityThread.access$800(ActivityThread.java:144)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5221)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
 Caused by: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
        at android.support.v7.app.ActionBarActivityDelegate.onCreate(ActionBarActivityDelegate.java:151)
        at android.support.v7.app.ActionBarActivityDelegateBase.onCreate(ActionBarActivityDelegateBase.java:138)
        at android.support.v7.app.ActionBarActivity.onCreate(ActionBarActivity.java:123)
        at br.com.lzl.colorlist.HomeActivity.onCreate(HomeActivity.java:20)
        at android.app.Activity.performCreate(Activity.java:5933)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)

如果我尝试使用Theme.Appcompat,则自定义不起作用。

有人有解决这个问题的线索吗?

从现在开始谢谢你!

2 个答案:

答案 0 :(得分:0)

对于Holo主题:

将您的ActionBarActivity切换为Activity,您就可以按照该教程进行操作。

对于材质主题:

将您的父主题更改为Theme.AppCompat.Light(或类似内容),并通过colorPrimary属性自定义操作栏背景,并通过android:textColorPrimary属性自定义操作栏文本颜色:

<style name="AppTheme" parent="Theme.AppCompat.Light">
    <item name="colorPrimary">#FFF</item>
    <item name="android:textColorPrimary">#2E4372</item>
</style>

enter image description here

请参阅http://android-developers.blogspot.com/2014/10/appcompat-v21-material-design-for-pre.html

答案 1 :(得分:0)

我解决了我的问题。我制作了这段代码。

getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setIcon(R.drawable.ic_launcher);
getSupportActionBar().setTitle(Html.fromHtml("<font color='#2E4372'; font-weight: bold;> ColorList </font>"));
getSupportActionBar().setBackgroundDrawable(getResources().getDrawable(R.drawable.ic_test_menu_2));

我使用了一个简单的主题

<style name="ThemeCustom" parent="Theme.AppCompat.Light">
    <item name="android:windowContentOverlay">@null</item>
</style>

所以我有了一个白色的动作栏,但主题的菜单按钮仍然是黑色。

这不是问题。

谢谢你们