Как изменить цвет текста всплывающей подсказки для пункта меню параметров на панели инструментов? - PullRequest
0 голосов
/ 10 октября 2019

Цвета всплывающей подсказки для пункта меню параметров и значка меню переполнения несовместимы в моем приложении по причинам, которые я не могу определить. Я хочу знать, как настроить цвет текста всплывающей подсказки для элемента меню параметров, который отображается в виде значка на панели инструментов.

Насколько я мог определить, MenuItem не предоставляет методов или атрибутов xml, предоставляющих эту функцию, иПанель инструментов тоже нет. Я подозреваю, что причина, по которой цвета текста различны, может заключаться в том, что всплывающая подсказка значка меню переполнения задается панелью инструментов, а подсказка MenuItem - чем-то другим.

Вот файл макета, который я использую для меню:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/filters"
        android:title="@string/filters"
        android:icon="@drawable/ic_filter_list_white_24dp"
        app:showAsAction="ifRoom">
        <menu>
            <group android:id="@+id/display">
                <item
                    android:id="@+id/action_sort_by_date"
                    android:title="@string/sort_date"
                    app:showAsAction="never" />
                <item
                    android:id="@+id/action_sort_by_class"
                    android:title="@string/sort_class"
                    app:showAsAction="never" />
                <item
                    android:id="@+id/action_sort_by_title"
                    android:title="@string/sort_title"
                    app:showAsAction="never" />
                <item
                    android:id="@+id/action_sort_by_type"
                    android:title="@string/sort_type"
                    app:showAsAction="never" />
            </group>
        </menu>
    </item>
    <group android:id="@+id/organization">
        <item
            android:id="@+id/action_open_classes"
            android:title="@string/edit_classes" />

        <item
            android:id="@+id/action_open_types"
            android:title="@string/edit_assignment_types" />

    </group>

    <group android:id="@+id/manipulation">
        <item
            android:id="@+id/action_import"
            android:title="@string/import_assignments" />
        <item
            android:id="@+id/action_export"
            android:title="@string/export_assignments" />
        <item
            android:id="@+id/action_delete_all"
            android:title="@string/clear_all" />
    </group>

</menu>

Кроме того, вот методы в моей Деятельности, которые воздействуют на меню:

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        this.menu = menu;
        Log.v(TAG, "menu=" + menu);
        getMenuInflater().inflate(R.menu.main_menu, menu);
        setMenuBackground(menu);
        return true;
    }

    private void setMenuBackground(Menu menu) {
        for (int i = 0; i < menu.size(); i++) {
            MenuItem item = menu.getItem(i);
            SpannableString s = new SpannableString(item.getTitle());
            s.setSpan(new ForegroundColorSpan(colorScheme.getColor(this, Field.DG_HEAD_TEXT)), 0,
                    s.length(), 0);
            item.setTitle(s);
        }
    }

    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
        Log.d(TAG, "Preparing options menu");

        MenuItem filterItem = menu.findItem(R.id.filters);

        Field field = currentScreenIsInProgress? Field.IP_APP_BAR_FILTER : Field.CP_APP_BAR_FILTER;
        filterItem.setIcon(colorScheme.getDrawable(this, field));

        SubMenu submenu = filterItem.getSubMenu();
        setMenuBackground(submenu);

        return super.onPrepareOptionsMenu(menu);
    }


    @Override
    public View onCreateView(View parent, String name, @NonNull Context context,
                             @NonNull AttributeSet attrs) {
        if (name.equals("androidx.appcompat.view.menu.ListMenuItemView") &&
                parent.getParent() instanceof FrameLayout) {

            View view = (View) parent.getParent();
            // change options menu bg color
            view.setBackgroundColor(colorScheme.getColor(this, Field.DG_BG));
        }
        return super.onCreateView(parent, name, context, attrs);
    }

Кроме того, в моем onResume () я вызываю:

    myToolbar.setNavigationIcon(R.drawable.custom_icon);

Помимо этого, вероятно, стоит упомянуть, что я использую пользовательскую реализацию для обеспечения тематики, которая возвращает вызовы ContextCompat.getColor () и .getDrawable ().

Вот как выглядят подсказкиоба случая: MenuItem tooltip overflow icon tooltip

...