В моем приложении для Android есть Toolbar, на который я хочу добавить пункты меню. Панель инструментов отображается правильно, но при раскрытии меню пункты меню становятся недействительными.
Структура меню определена в toolbar_menu.xml:
toolbar_menu.xml
<menu
xmlns:android = "http://schemas.android.com/apk/res/android"
xmlns:app = "http://schemas.android.com/apk/res-auto">
<item
android:id = "@+id/about"
android:title = "About"
app:showAsAction = "never"/>
</menu>
Действие определяет панель инструментов в файле макета activity_layout.xml.
activity_layout.xml
<?xml version = "1.0" encoding = "utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android = "http://schemas.android.com/apk/res/android"
xmlns:app = "http://schemas.android.com/apk/res-auto"
xmlns:tools = "http://schemas.android.com/tools"
android:layout_width = "match_parent"
android:layout_height = "match_parent"
android:visibility = "visible"
tools:context = ".MainActivity">
<androidx.appcompat.widget.Toolbar
android:id = "@+id/toolbar"
android:layout_width = "match_parent"
android:layout_height = "wrap_content"
android:background = "?attr/colorPrimary"
android:minHeight = "?attr/actionBarSize"
android:theme = "?attr/actionBarTheme"
app:layout_constraintEnd_toEndOf = "parent"
app:layout_constraintTop_toTopOf = "parent"
app:title = "Welcome"/>
<!-- other widgets follow -->
</androidx.constraintlayout.widget.ConstraintLayout>
И класс активности, в котором я установил панель инструментов, - MainActivity.java.
MainActivity.java
// import dependencies
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.main_activity);
final Toolbar toolbar = (Toolbar) this.findViewById(R.id.toolbar);
this.setSupportActionBar(toolbar);
}
@Override
public boolean onCreateOptionsMenu(final Menu menu) {
this.getMenuInflater().inflate(R.menu.toolbar_menu, menu);
return true;
}
}
вы можете проверить, является ли текст белым, используя app:showAsAction = "always"
по умолчанию цвет текста черный, я думаю
Какая тема используется в приложении?
@GabrieleMariotti в <application> я установил android:theme = "@style/Theme.Deck.NoActionBar", а на самом Toolbar я установил android:theme = "?attr/actionBarTheme". Оказывается, действительно, как предположил @ShayKin, цвет текста пунктов меню белый. Цвет текста станет черным, если я удалю тему на <Toolbar>, но это влияет не только на цвет текста раскрывающихся элементов, но и на само меню. Есть идеи, где я могу установить цвет текста в раскрывающемся меню?
@JCvanDamme Что такое Theme.Deck.NoActionBar?
@GabrieleMariotti Theme.Deck.NoActionBar - это тема, унаследованная от Theme.MaterialComponents.DayNight.DarkActionBar. Я мог решить проблему, как я писал в stackoverflow.com/a/66977475/4275167. Большое спасибо
@JCvanDamme Вы также можете использовать приложение: popupTheme. Таким образом вы меняете только всплывающее окно на панели инструментов.




Благодаря комментарию @GabrieleMariotti ниже я понял, что проблема и решение такие же, как https://stackoverflow.com/a/63279563/4275167.
Я использую настраиваемую тему Theme.Deck.NoActionBar, унаследованную от Theme.MaterialComponents.DayNight.DarkActionBar.
themes.xml
<style name = "Theme.Deck" parent = "Theme.MaterialComponents.DayNight.DarkActionBar">...</style>
<style name = "Theme.Deck.NoActionBar">
<item name = "windowActionBar">false</item>
<item name = "windowNoTitle">true</item>
<item name = "android:itemTextAppearance">@style/menuItem</item> <!-- added to solve the problem -->
</style>
styles.xml
<!-- added to solve the problem -->
<style name = "menuItem" parent = "Widget.AppCompat.TextView.SpinnerItem">
<item name = "android:textColor">@color/black</item>
</style>
Проблема в цвете текста во всплывающем меню.
Добавьте атрибут app:popupTheme в свой Toolbar.
<androidx.appcompat.widget.Toolbar
app:popupTheme = "@style/AppTheme.PopupOverlay"
../>
с участием:
<style name = "AppTheme.PopupOverlay" parent = "ThemeOverlay.AppCompat.DayNight.ActionBar" >
<item name = "android:textColor">@color/...</item>
</style>
может цвет текста белый?