Цвет значка MenuItem не меняется - PullRequest
0 голосов
/ 10 сентября 2018

Я пытаюсь изменить текст и цвет значка моего MenuItem с помощью кода. Я искал решения, как это сделать, и текст меняется, но значок нет.

Вот мой код на данный момент:

    public void setItemOptionColor(boolean isActive){
            MenuItem menuItem = mDrawerNavigationView.getMenu().findItem(R.id.my_item);
            SpannableString spannableString = new SpannableString(menuItem.getTitle());
            Drawable drawable = menuItem.getIcon();

            if(isActive){
                spannableString.setSpan(new ForegroundColorSpan(ContextCompat.getColor(getContext(), R.color.accent)), 0, spannableString.length(), 0);
                DrawableCompat.setTint(drawable,getResources().getColor(R.color.accent));  
                //drawable.setColorFilter(getResources().getColor(R.color.accent), PorterDuff.Mode.SRC_ATOP);
                //drawable.setTint(getResources().getColor(R.color.accent));
            }
            menuItem.setIcon(drawable);
            menuItem.setTitle(spannableString);
        }

Итак, прямо сейчас, чтобы изменить цвет значка, который я использую DrawableCompat, но есть и две другие мои попытки, которые закомментированы. Все эти 3 метода не работают.

Также я добавлю, что, хотя я удалил настройку оттенка по умолчанию на белый из файла XML, значок все равно отображается белым, хотя изначально нарисованный файл черный. И я не знаю, почему это так, может, это как-то связано с проблемой

1 Ответ

0 голосов
/ 10 сентября 2018
public void setItemOptionColor(boolean isActive) {
        mDrawerNavigationView.setItemIconTintList(null); // add this line
        MenuItem menuItem = mDrawerNavigationView.getMenu().findItem(R.id.my_item);
        SpannableString spannableString = new SpannableString(menuItem.getTitle());
        Drawable drawable = menuItem.getIcon();

        if (isActive) {
            int color = ContextCompat.getColor(getContext(), R.color.accent);
            spannableString.setSpan(new ForegroundColorSpan(color), 0, spannableString.length(), 0);
            DrawableCompat.setTint(drawable, getResources().getColor(R.color.accent));
        }
        menuItem.setIcon(drawable);
        menuItem.setTitle(spannableString);
    }
...