Цвета всплывающей подсказки для пункта меню параметров и значка меню переполнения несовместимы в моем приложении по причинам, которые я не могу определить. Я хочу знать, как настроить цвет текста всплывающей подсказки для элемента меню параметров, который отображается в виде значка на панели инструментов.
Насколько я мог определить, 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 ().
Вот как выглядят подсказкиоба случая: