如何自定义浮动ActionBar的背景?

时间:2016-09-19 10:21:39

标签: android android-actionbar android-theme android-styles android-actionmode

在Marshmallow下,我们获得了复制/过去(感谢上帝)的顶部操作栏,我们有一个浮动操作栏。我现在的问题是如何自定义浮动Actionbar的背景和文本颜色为黑色而不是白色(不更改我的应用程序的主题是Theme.material.light.NoactionBar)

enter image description here

2 个答案:

答案 0 :(得分:1)

我认为这样做是不可能的。经过很长时间深入挖掘android源代码,我发现工具栏实现了一个android内部类 com.android.internal.widget.FloatingToolbar.FloatingToolbarPopup

弹出容器从名为 com.android.internal.R.layout.floating_popup_container 的布局中膨胀,后者使用此背景 android:background =“?attr / floatingToolbarPopupBackgroundDrawable”

似乎无法从xml样式设置属性floatingToolbarPopupBackgroundDrawable。

但是,您可以使用java反射

更改活动类的背景
@Override
public void onActionModeStarted(ActionMode mode)
{
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
    {
        try
        {
            Field field = mode.getClass().getDeclaredField("mFloatingToolbar");
            field.setAccessible(true);
            Object mFloatingToolbar = field.get(mode);
            field = mFloatingToolbar.getClass().getDeclaredField("mPopup");
            field.setAccessible(true);
            Object mPopup = field.get(mFloatingToolbar);
            field = mPopup.getClass().getDeclaredField("mContentContainer");
            field.setAccessible(true);
            ViewGroup mContentContainer = (ViewGroup)field.get(mPopup);
            mContentContainer.setBackgroundColor(Color.RED);
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
    super.onActionModeStarted(mode);
}

答案 1 :(得分:0)

试试这个:

fab.setBackgroundTintList(ColorStateList.valueOf(ContextComp‌​at.getColor(getActiv‌​ity(), R.color.yellow)));