【问题标题】:Setting Action Bar Item Text Color?设置操作栏项目文本颜色?
【发布时间】:2014-09-11 15:45:26
【问题描述】:

我正在尝试使用自定义 style 设置我的操作栏项目的文本颜色,但它没有效果。

我试过设置:

<item name="android:actionMenuTextColor">@style/AppTheme.ActionBar.Text</item>

在无效的&lt;style name="ActionBar"&lt;style name="AppTheme" 中。如果我执行后者,我的应用程序会崩溃:

07-21 13:12:58.519: E/AndroidRuntime(24690): FATAL EXCEPTION: main
07-21 13:12:58.519: E/AndroidRuntime(24690): android.view.InflateException: Binary XML file line #17: Error inflating class com.android.internal.view.menu.ActionMenuItemView
07-21 13:12:58.519: E/AndroidRuntime(24690):    at android.view.LayoutInflater.createView(LayoutInflater.java:619)
07-21 13:12:58.519: E/AndroidRuntime(24690):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:693)
07-21 13:12:58.519: E/AndroidRuntime(24690):    at android.view.LayoutInflater.inflate(LayoutInflater.java:467)
07-21 13:12:58.519: E/AndroidRuntime(24690):    at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
07-21 13:12:58.519: E/AndroidRuntime(24690):    at com.android.internal.view.menu.BaseMenuPresenter.createItemView(BaseMenuPresenter.java:157)
07-21 13:12:58.519: E/AndroidRuntime(24690):    at com.android.internal.view.menu.BaseMenuPresenter.getItemView(BaseMenuPresenter.java:176)
07-21 13:12:58.519: E/AndroidRuntime(24690):    at com.android.internal.view.menu.ActionMenuPresenter.getItemView(ActionMenuPresenter.java:306)
07-21 13:12:58.519: E/AndroidRuntime(24690):    at com.android.internal.view.menu.ActionMenuPresenter.flagActionItems(ActionMenuPresenter.java:593)
07-21 13:12:58.519: E/AndroidRuntime(24690):    at com.android.internal.view.menu.MenuBuilder.flagActionItems(MenuBuilder.java:1048)
07-21 13:12:58.519: E/AndroidRuntime(24690):    at com.android.internal.view.menu.BaseMenuPresenter.updateMenuView(BaseMenuPresenter.java:91)
07-21 13:12:58.519: E/AndroidRuntime(24690):    at com.android.internal.view.menu.ActionMenuPresenter.updateMenuView(ActionMenuPresenter.java:334)
07-21 13:12:58.519: E/AndroidRuntime(24690):    at com.android.internal.view.menu.MenuBuilder.dispatchPresenterUpdate(MenuBuilder.java:244)
07-21 13:12:58.519: E/AndroidRuntime(24690):    at com.android.internal.view.menu.MenuBuilder.onItemsChanged(MenuBuilder.java:946)
07-21 13:12:58.519: E/AndroidRuntime(24690):    at com.android.internal.view.menu.MenuBuilder.startDispatchingItemsChanged(MenuBuilder.java:969)
07-21 13:12:58.519: E/AndroidRuntime(24690):    at com.android.internal.policy.impl.PhoneWindow.preparePanel(PhoneWindow.java:507)
07-21 13:12:58.519: E/AndroidRuntime(24690):    at     com.android.internal.policy.impl.PhoneWindow.doInvalidatePanelMenu(PhoneWindow.java:851)
07-21 13:12:58.519: E/AndroidRuntime(24690):    at com.android.internal.policy.impl.PhoneWindow$1.run(PhoneWindow.java:258)
07-21 13:12:58.519: E/AndroidRuntime(24690):    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)
07-21 13:12:58.519: E/AndroidRuntime(24690):    at android.view.Choreographer.doCallbacks(Choreographer.java:562)
07-21 13:12:58.519: E/AndroidRuntime(24690):    at android.view.Choreographer.doFrame(Choreographer.java:531)
07-21 13:12:58.519: E/AndroidRuntime(24690):    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)
07-21 13:12:58.519: E/AndroidRuntime(24690):    at android.os.Handler.handleCallback(Handler.java:725)
07-21 13:12:58.519: E/AndroidRuntime(24690):    at android.os.Handler.dispatchMessage(Handler.java:92)
07-21 13:12:58.519: E/AndroidRuntime(24690):    at android.os.Looper.loop(Looper.java:137)
07-21 13:12:58.519: E/AndroidRuntime(24690):    at android.app.ActivityThread.main(ActivityThread.java:5328)
07-21 13:12:58.519: E/AndroidRuntime(24690):    at java.lang.reflect.Method.invokeNative(Native Method)
07-21 13:12:58.519: E/AndroidRuntime(24690):    at java.lang.reflect.Method.invoke(Method.java:511)
07-21 13:12:58.519: E/AndroidRuntime(24690):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
07-21 13:12:58.519: E/AndroidRuntime(24690):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
07-21 13:12:58.519: E/AndroidRuntime(24690):    at dalvik.system.NativeStart.main(Native Method)
07-21 13:12:58.519: E/AndroidRuntime(24690): Caused by: java.lang.reflect.InvocationTargetException
07-21 13:12:58.519: E/AndroidRuntime(24690):    at java.lang.reflect.Constructor.constructNative(Native Method)
07-21 13:12:58.519: E/AndroidRuntime(24690):    at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
07-21 13:12:58.519: E/AndroidRuntime(24690):    at android.view.LayoutInflater.createView(LayoutInflater.java:593)
07-21 13:12:58.519: E/AndroidRuntime(24690):    ... 29 more
07-21 13:12:58.519: E/AndroidRuntime(24690): Caused by: android.content.res.Resources$NotFoundException: Resource is not a ColorStateList (color or path): TypedValue{t=0x1/d=0x7f0c008f a=3 r=0x7f0c008f}
07-21 13:12:58.519: E/AndroidRuntime(24690):    at android.content.res.Resources.loadColorStateList(Resources.java:2963)
07-21 13:12:58.519: E/AndroidRuntime(24690):    at android.content.res.TypedArray.getColorStateList(TypedArray.java:343)
07-21 13:12:58.519: E/AndroidRuntime(24690):    at android.widget.TextView.<init>(TextView.java:851)
07-21 13:12:58.519: E/AndroidRuntime(24690):    at com.android.internal.view.menu.ActionMenuItemView.<init>(ActionMenuItemView.java:116)
07-21 13:12:58.519: E/AndroidRuntime(24690):    at com.android.internal.view.menu.ActionMenuItemView.<init>(ActionMenuItemView.java:112)

我也试过使用android:itemTextAppearance,也没有效果。

这是我的styles.xml

<resources xmlns:android="http://schemas.android.com/apk/res/android">

<!-- Base application theme, dependent on API level. This theme is replaced
    by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
-->
<style name="AppBaseTheme" parent="@style/Theme.AppCompat.Light.DarkActionBar">
   <!-- Theme customizations available in newer API levels can go in
        res/values-vXX/styles.xml, while customizations related to
        backward-compatibility can go here. -->
</style>

<!-- Application theme. -->

<style name="AppTheme" parent="AppBaseTheme">

    <item name="android:actionBarStyle">@style/ActionBar</item>
    <item name="android:actionBarTabTextStyle">@style/ActionBarTabText</item>

    <item name="android:itemTextAppearance">@style/TextAppearance</item>

    <item name="actionBarStyle">@style/ActionBar</item>
    <item name="actionBarTabTextStyle">@style/ActionBarTabText</item>
</style>

<!-- Action Bar -->

<style name="ActionBar" parent="@style/Widget.AppCompat.Light.ActionBar">

    <item name="android:titleTextStyle">@style/AppTheme.ActionBar.TitleTextStyle</item>
    <item name="android:actionMenuTextColor">@style/AppTheme.ActionBar.Text</item>
    <item name="android:background">@color/Black</item>

    <item name="titleTextStyle">@style/AppTheme.ActionBar.TitleTextStyle</item>
    <item name="actionMenuTextColor">@style/AppTheme.ActionBar.Text</item>

</style>

<style name="AppTheme.ActionBar.TitleTextStyle" parent="@android:style/TextAppearance">
    <item name="android:textColor">@color/White</item>
</style>


<style name="AppTheme.ActionBar.Text" parent="@android:style/TextAppearance">
    <item name="android:textColor">@color/White</item>
</style>


<!-- Action Bar Tabs -->
<style name="AppTheme.Tabtheme" parent="@style/Theme.AppCompat.Light.DarkActionBar">
    <item name="android:actionBarTabTextStyle">@style/ActionBarTabText</item>
    <item name="actionBarTabTextStyle">@style/ActionBarTabText</item>
</style>

<style name="ActionBarTabText" parent="@style/Widget.AppCompat.Base.ActionBar.TabText">
    <item name="android:textColor">@color/White</item>
</style>

<!-- Text color for Action bar items -->

<style name="TextAppearance">
    <item name="android:textColor">@android:color/white</item>
</style>

</resources>

【问题讨论】:

    标签: android xml android-actionbar android-styles


    【解决方案1】:

    您可以通过为 android 操作栏设置自定义视图来轻松做到这一点。请按照以下说明操作

    首先像这样为 ActionBar 设置自定义视图..

    actionBar = getSupportActionBar();
    actionBar.setCustomView(R.layout.action_provider);
    

    现在将您的文本视图放在布局“action_provider”中。

    现在像这样获取你的 textview id

    pack_tv = (TextView) actionBar.getCustomView().findViewById(R.id.action_bar_tv);
    

    现在您可以轻松地做任何您想做的事情.. 在您的情况下设置文本视图颜色.. 像这样

    pack_tv.setTextColor("your_text_color");
    

    你可以做任何事情..请检查下面的代码..

    actionBar = getSupportActionBar();
            actionBar.setCustomView(R.layout.action_provider);
            iv_d = (ImageView) actionBar.getCustomView().findViewById(R.id.action_menu);
            pack_tv = (TextView) actionBar.getCustomView().findViewById(R.id.action_bar_tv);
            spinner_value = (TextView) actionBar.getCustomView().findViewById(R.id.action_city);
            city_spinner = (LinearLayout) actionBar.getCustomView().findViewById(R.id.city_spinner_layout);
            pack_spinner = (LinearLayout) actionBar.getCustomView().findViewById(R.id.pack_spinner_layout);
            dashiv1 = (ImageView) actionBar.getCustomView().findViewById(R.id.dash_iv1);
            dashiv2 = (ImageView) actionBar.getCustomView().findViewById(R.id.dash_iv2);
    
            dashiv1.setVisibility(View.GONE);
            dashiv2.setVisibility(View.GONE);
    
            iv_d.setOnClickListener(new OnClickListener() {
    
                @Override
                public void onClick(View v) {
    
                }
            });
    

    就是这样……你可以走了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      相关资源
      最近更新 更多