【问题标题】:Not able to customize the actionbar manually无法手动自定义操作栏
【发布时间】:2017-07-12 00:20:08
【问题描述】:

使用的 IDE=Eclipse JUNO
API 级别=14
设备操作系统=4.2.2 Jelly Bean


我一直在尝试使用 XML 文件更改操作栏的背景颜色和文本字体和字体颜色。 我参考了this 教程并尝试过,但我收到一条消息“不幸的是,MyAppName 已停止”

我用来改变背景的代码是:

res/values/themes.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="MyTheme" parent="@android:style/Theme.Holo.Light">
        <item name="android:actionBarStyle">@style/MyActionBar</item>
    </style>

    <style name="MyActionBar" parent="@android:style/Widget.Holo.Light.ActionBar">
        <item name="android:background">#6845db</item>
    </style>
</resources>

之后,我将 Manifest 中的应用主题更改为:-

android:theme="@style/MyTheme"

我是 Android 开发的初学者。



我的错误日志猫是:-
05-12 14:48:33.866: E/hawaii.gralloc(1449): GRALLOC ALLOC flags 933
05-12 14:48:33.886: E/HAWAII_EGL(1449): abuffer = (480 800) (933)
05-12 14:48:34.257: E/AndroidRuntime(7127): FATAL EXCEPTION: main
05-12 14:48:34.257: E/AndroidRuntime(7127): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.decode.timer/com.decode.timer.HomeScreen}: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
05-12 14:48:34.257: E/AndroidRuntime(7127):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2255)
05-12 14:48:34.257: E/AndroidRuntime(7127):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2309)
05-12 14:48:34.257: E/AndroidRuntime(7127):     at android.app.ActivityThread.access$700(ActivityThread.java:157)
05-12 14:48:34.257: E/AndroidRuntime(7127):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1289)
05-12 14:48:34.257: E/AndroidRuntime(7127):     at android.os.Handler.dispatchMessage(Handler.java:99)
05-12 14:48:34.257: E/AndroidRuntime(7127):     at android.os.Looper.loop(Looper.java:176)
05-12 14:48:34.257: E/AndroidRuntime(7127):     at android.app.ActivityThread.main(ActivityThread.java:5317)
05-12 14:48:34.257: E/AndroidRuntime(7127):     at java.lang.reflect.Method.invokeNative(Native Method)
05-12 14:48:34.257: E/AndroidRuntime(7127):     at java.lang.reflect.Method.invoke(Method.java:511)
05-12 14:48:34.257: E/AndroidRuntime(7127):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
05-12 14:48:34.257: E/AndroidRuntime(7127):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
05-12 14:48:34.257: E/AndroidRuntime(7127):     at dalvik.system.NativeStart.main(Native Method)
05-12 14:48:34.257: E/AndroidRuntime(7127): Caused by: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
05-12 14:48:34.257: E/AndroidRuntime(7127):     at android.support.v7.app.ActionBarActivityDelegate.onCreate(ActionBarActivityDelegate.java:110)
05-12 14:48:34.257: E/AndroidRuntime(7127):     at android.support.v7.app.ActionBarActivityDelegateICS.onCreate(ActionBarActivityDelegateICS.java:57)
05-12 14:48:34.257: E/AndroidRuntime(7127):     at android.support.v7.app.ActionBarActivity.onCreate(ActionBarActivity.java:99)
05-12 14:48:34.257: E/AndroidRuntime(7127):     at com.decode.timer.HomeScreen.onCreate(HomeScreen.java:15)
05-12 14:48:34.257: E/AndroidRuntime(7127):     at android.app.Activity.performCreate(Activity.java:5326)
05-12 14:48:34.257: E/AndroidRuntime(7127):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1097)
05-12 14:48:34.257: E/AndroidRuntime(7127):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2218)
05-12 14:48:34.257: E/AndroidRuntime(7127):     ... 11 more
05-12 14:48:34.657: E/hawaii.gralloc(1449): GRALLOC ALLOC flags 933
05-12 14:48:34.687: E/HAWAII_EGL(1449): abuffer = (480 235) (933)
05-12 14:48:34.867: E/android.os.Debug(1961): !@Dumpstate > dumpstate -k -t -z -d -o /data/log/dumpstate_app_error
05-12 14:48:35.087: E/hawaii.gralloc(1449): GRALLOC ALLOC flags 10000b22
05-12 14:48:35.147: E/hawaii.gralloc(1449): GRALLOC ALLOC flags 10000b22
05-12 14:48:35.157: E/HAWAII_EGL(1449): abuffer = (480 800) (10000b22)
05-12 14:48:35.618: E/hawaii.gralloc(1449): GRALLOC ALLOC flags 933
05-12 14:48:35.638: E/HAWAII_EGL(1449): abuffer = (480 235) (933)
05-12 14:48:35.848: E/hawaii.gralloc(1449): GRALLOC ALLOC flags 933
05-12 14:48:35.858: E/HAWAII_EGL(1449): abuffer = (480 235) (933)
05-12 14:48:45.688: E/dalvikvm(7141): adjustAdaptiveCoef max=4194304, min=1048576, ut=568

【问题讨论】:

  • 我认为你做得对,但你的问题是你把你的风格放在价值/主题上,你应该在 v14/style 中尝试..它会起作用..因为你的 api 级别是 v14
  • 好的,我正在尝试@Tufan
  • 还是一样的结果 :( @Tufan
  • 你愿意做这样的事情吗 String title=getSupportActionBar().getTitle().toString();最终 ActionBar abar = getSupportActionBar(); ColorDrawable colorDrawable = new ColorDrawable(Color.parseColor("#FE642E")); abar.setBackgroundDrawable(colorDrawable);

标签: android android-actionbar


【解决方案1】:

您的 LogCat 可能刚刚给了您答案

05-12 14:48:34.257: E/AndroidRuntime(7127): 由: java.lang.IllegalStateException:您需要使用 Theme.AppCompat 此活动的主题(或后代)。

所以你只需要像这样改变你的主题的父级

<style name="MyTheme" parent="@style/Theme.AppCompat.Light">
    <item name="actionBarStyle">@style/MyActionBar</item>
</style>

<style name="MyActionBar" parent="@style/Widget.AppCompat.ActionBar">
    <item name="background">#6845db</item>
</style>

另外,这个问题here 可能会帮助您理解为什么在使用 AppCompat 时不需要在项目名称前添加android:

对于您的 TitleTextAppearance,您必须创建一个以 TextAppearance.AppCompat.Widget.ActionBar.Title 作为父级的样式

<style name="MyTitleTextAppearance"
    parent="TextAppearance.AppCompat.Widget.ActionBar.Title">
    <item name="textColor">@color/white</item>
</style>

然后以MyActionBar 样式将其设置为您的titleTextStyle

<item name="titleTextStyle">@style/MyTitleTextAppearance</item>

【讨论】:

  • 是的!!!!它有效,但你能告诉我如何自定义操作栏的文本颜色和文本外观吗??? @freddieptf
【解决方案2】:

你可以通过程序来做到这一点..

final ActionBar abar = getSupportActionBar();
ColorDrawable colorDrawable = new ColorDrawable(Color.parseColor("#FE642E"));    
abar.setBackgroundDrawable(colorDrawable);

 abar.setDisplayShowCustomEnabled(true);
 abar.setDisplayShowTitleEnabled(false);
 abar.setDisplayHomeAsUpEnabled(true);
 abar.setHomeButtonEnabled(true);

【讨论】:

  • 你能告诉我最后4行的用途吗??
猜你喜欢
  • 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
相关资源
最近更新 更多