在运行时将颜色过滤器应用于操作溢出图标

时间:2014-08-12 03:44:38

标签: android android-actionbar

有没有办法让Action bar溢出图标在运行时可绘制以应用滤镜?我正在寻找类似于menu.findItem(R.id.menu_id).getIcon()的东西,除了3点溢出,这样我就可以做.setColorFilter。

谢谢!

2 个答案:

答案 0 :(得分:1)

是的,有办法。您只需在视图层次结构中找到溢出图标。一种好方法是在ViewGroup返回的getDecorView()中进行搜索。您可以使用带有FIND_VIEWS_WITH_CONTENT_DESCRIPTION标记的findViewsWithText来搜索它。

示例代码:

public static void setOverflowButtonColor(final Activity activity, final int visibleFontColor) {
    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;
            }
            TintImageView overflow = (TintImageView) outViews.get(0);
            overflow.setColorFilter(Color.CYAN);
            removeOnGlobalLayoutListener(decorView, this);
        }
    });
}

public static void removeOnGlobalLayoutListener(View v, ViewTreeObserver.OnGlobalLayoutListener listener) {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
        v.getViewTreeObserver().removeGlobalOnLayoutListener(listener);
    }
    else {
        v.getViewTreeObserver().removeOnGlobalLayoutListener(listener);
    }
}

有关详细信息,请参阅我在类似问题中的回答:https://stackoverflow.com/a/27672844/2707179

答案 1 :(得分:0)

您无法在OverflowIcon中获得onCreateOptionsMenu,但您仍然可以在运行时更改其外观,因此不是以编程方式对其应用过滤器,而是可以创建自己的OverflowIcon而不是图像。

<强>样品:

您可以更改活动风格中的overflow图标

<style name="YOUR_THEME" parent="android:style/Theme.Holo.Light">
 <item name="android:actionOverflowButtonStyle">@style/CustomOverflow</item>
</style>

<style name="CustomOverflow" parent="android:style/Widget.Holo.ActionButton.Overflow">
   <item name="android:src">@drawable/your_custom_overflow_image</item>
</style>