Android棒棒糖材质devise溢出菜单图标颜色

我在Nexus 7上尝试新的材质devise,并有以下奇怪的行为。 溢出菜单图标在第一次应用程序启动时具有不同的颜色。

我改变了android:textColorPrimary颜色,并阅读本教程 。

  1. 首次应用程序发布 第一次应用程

  2. 第二个App的发布 在这里输入图像说明

正如您所看到的,主文本颜色的颜色在第一次启动时没有设置。 它只是如果我按下主页button,并重新启动应用程序设置。 这是我的styles.xml文件:

 <style name="AppBaseTheme" parent="android:Theme.Material.Light"> <item name="android:colorPrimary">#FF4444</item> <item name="android:colorPrimaryDark">#CC0000</item> <item name="android:textColorPrimary">#000000</item> </style> 

有人可以解释,为什么会发生这种行为?

我设置android:minSdkVersion="21" ,不想使用支持库。

Solutions Collecting From Web of "Android棒棒糖材质devise溢出菜单图标颜色"

运行PreferenceActivity时,遇到了同样的问题,它不能在LOLLIPOP设备上使用appcompat-v7库。 当这个活动第一次打开时,溢出图标总是白色完全忽略android:textColorPrimaryandroid:colorControlNormal 。 后续运行或方向更改会导致正确的着色。

我创造了一个能够帮助你缓解这个问题的要点。 该代码将全局布局观察者绑定到工具栏,并在find溢出图标时将其replace并取消绑定观察者。 所以不要在你不期望出现溢出图标的地方使用它,因为在这种情况下观察者不会被解除绑定。

链接到要点: https : //gist.github.com/consp1racy/4b640679de553fdb3046

只需添加选项菜单的辅助文字颜色即:

 <item name="android:textColorSecondary">@color/text_color</item> 

在某些情况下,辅助颜色被设置为原色。 我不知道为什么。

也添加这些项目:

 <item name="actionMenuTextColor">@color/white</item> <item name="android:actionMenuTextColor">@color/white</item> 

如果这没有帮助,那么试试这个:

 <style name="AppBaseTheme" parent="android:Theme.Material.Light"> <item name="android:itemTextAppearance">@style/TextAppearance</item> </style> <style name="TextAppearance"> <item name="android:textColor">@android:color/white</item> </style> 

这将为Holo.Light.DarkActionBar

如果您想在21之前的设备中使用材料devise,则需要扩展Theme.AppCompat.Light.NoActionBar主题。 为此,需要将com.android.support:appcompat-v7:21.0.0编译为项目的依赖项,这样您就可以在布局中使用工具栏。

然后在values / themes.xml中定义你的主题:

 <style name="Theme.MyTheme" parent="Theme.AppCompat.Light.NoActionBar"> <!-- colorPrimary is used for the default action bar background --> <item name="colorPrimary">@color/my_awesome_color</item> <!-- colorPrimaryDark is used for the status bar --> <item name="colorPrimaryDark">@color/my_awesome_darker_color</item> <!-- colorAccent is used as the default value for colorControlActivated which is used to tint widgets --> <item name="colorAccent">@color/accent</item> <!-- You can also set colorControlNormal, colorControlActivated colorControlHighlight & colorSwitchThumbNormal. --> </style> 

和你的布局/ my_activity.xml中的工具栏:

 <android.support.v7.widget.Toolbar xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/my_awesome_toolbar" android:layout_height="wrap_content" android:layout_width="match_parent" android:minHeight="?attr/actionBarSize" android:background="?attr/colorPrimary" /> 

你有可选的attrs来定义主题和popupTheme:

 app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" 

Chris Banes写了一篇很好的文章,你应该阅读https://chris.banes.me/2014/10/17/appcompat-v21/

我读过你使用eclipse的问题的意见,我强烈build议使用android studio + gradle和eclipse。

只需将android:theme="@style/ThemeOverlay.AppCompat.Dark"到工具栏即可

 <android.support.v7.widget.Toolbar xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/my_awesome_toolbar" android:layout_height="wrap_content" android:layout_width="match_parent" android:theme="@style/ThemeOverlay.AppCompat.Dark android:minHeight="?attr/actionBarSize" android:background="?attr/colorPrimary" /> 

溢出菜单图标将现在是白色:)

  public static void setOverflowButtonColor(final Activity activity, final int color) { final String overflowDescription = activity.getString(R.string.abc_action_menu_overflow_description); final ViewGroup decorView = (ViewGroup) activity.getWindow().getDecorView(); final ViewTreeObserver viewTreeObserver = decorView.getViewTreeObserver(); viewTreeObserver.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { final ArrayList<View> outViews = new ArrayList<View>(); decorView.findViewsWithText(outViews, overflowDescription, View.FIND_VIEWS_WITH_CONTENT_DESCRIPTION); if (outViews.isEmpty()) { return; } AppCompatImageView overflow = (AppCompatImageView) outViews.get(0); overflow.setColorFilter(color); removeOnGlobalLayoutListener(decorView, this); } }); } 

使用这个方法和

 setOverflowButtonColor(this, getResources().getColor(R.color.hot_pink)); 

这里是颜色hot_pink。