Как изменить цвет фона всплывающее меню android
я генерирую каждую опцию меню из запроса базы данных. Вот мой код.
final PopupMenu popupMenu = new PopupMenu(getBaseContext(), v);
SQLiteDatabase db = AdapterDb.getReadableDatabase();
Cursor cursor = db.rawQuery(sql, null);
int ctritem = 0;
if (cursor.moveToFirst()) {
popupMenu.getMenu().add(Menu.NONE, ctritem, Menu.NONE, "ALL ITEMS");
do {
ctritem++;
popupMenu.getMenu().add(Menu.NONE, ctritem, Menu.NONE, cursor.getString(0));
} while (cursor.moveToNext());
}
все в порядке, но проблема в том, как изменить цвет меню опций или цвет фона всплывающего меню (от черного до белого), возможно ли это ? Спасибо
11 ответов
добавить стиль popupMenu в ur AppTheme:
<style name="AppTheme" parent="android:Theme.Light">
<item name="android:popupMenuStyle">@style/PopupMenu</item>
</style>
<style name="PopupMenu" parent="@android:style/Widget.PopupMenu">
<item name="android:popupBackground">@android:color/white</item>
</style>
манифест.XML-код:
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
.............
</application>
Если вы используете AppCompact-v7, то вы можете стиль PopupMenu, как показано ниже:
<style name="AppTheme" parent="Theme.AppCompat.Light">
<item name="popupMenuStyle">@style/popupMenuStyle</item>
</style>
<style name="popupMenuStyle" parent="Widget.AppCompat.PopupMenu">
<item name="android:popupBackground">@android:color/white</item>
</style>
Примечание: PopMenu всегда работает с контекстом активности, а не с контекстом приложения.
пожалуйста, добавьте следующие строки в xml-файл стиля, я надеюсь, что это поможет для применения material design. стиль.в XML
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<!-- To change the popup menu and app text color -->
<item name="android:textColor">@color/colorPrimary</item>
<!-- To change the background of options menu-->
<item name="android:itemBackground">@color/skyBlue</item>
</style>
дополнительные сведения см. По этой ссылке http://www.viralandroid.com/2016/01/how-to-change-background-and-text-color-of-android-actionbar-option-menu.html
Если вы используете тему AppCompat, используйте
<style name="PopupMenu" parent="Widget.AppCompat.PopupMenu">
<item name="android:popupBackground">@android:color/black</item>
</style>
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="popupMenuStyle">@style/PopupMenu</item>
</style>
иначе
<style name="AppTheme" parent="android:Theme.Light">
<item name="android:popupMenuStyle">@style/PopupMenu</item>
</style>
<style name="PopupMenu" parent="@android:style/Widget.PopupMenu">
<item name="android:popupBackground">@android:color/white</item>
</style>
сначала определите свой стиль в фоновом режиме всплывающего меню в стилях.XML-файл в моем случае я использую это...
<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
<item name="android:popupMenuStyle">@style/PopupMenu</item>
</style>
<style name="PopupMenu" parent="@android:style/Widget.PopupMenu">
<item name="android:popupBackground">@android:color/holo_green_light</item>
</style>
здесь я хочу изменить фон всплывающего меню в определенном действии, поэтому примените тему (android: theme= "@style / AppTheme") с объявлением активности, и это, безусловно, работает. еще важно создать всплывающее меню с помощью этого кода PopupMenu popup = new PopupMenu(ваша активность, viewObj);
в макете, где вы даете панель инструментов, укажите тему по app: popupTheme= "@style / MyPopupMenu"
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:minHeight="?attr/actionBarSize"
android:background="#2196F3"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
style="@style/DrawerArrowStyle"
app:popupTheme="@style/MyPopupMenu">
</android.support.v7.widget.Toolbar>
добавить тему PopupMenu в AppTheme:
<style name="AppTheme" parent="Theme.AppCompat.Light">
<item name="popupTheme">@style/PopupMenuTheme</item>
</style>
<style name="PopupMenuTheme" parent="Theme.AppCompat.Light">
<item name="android:background">@android:color/white</item>
</style>
манифест.XML-код:
<application
...
android:theme="@style/AppTheme">
...
</application>
См. как стиль PopupMenu? для получения дополнительных объяснений. Я столкнулся с той же проблемой, искал много, но нашел решение в упомянутой ссылке.
PopupMenu создается следующим образом:
PopupMenu popup = new PopupMenu(context, view);
PopupMenu принимает стиль контекста, который передается, передавая действие, поскольку контекст решил мою проблему.
В Стиле Ваша Тема Приложения
<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
<!-- Customize your theme here. -->
<item name="android:itemBackground">@color/list_background</item>
<item name="android:itemTextAppearance">@style/MyActionBar.MenuTextStyle</item>
</style>
Для Появления Текста
<style name="MyActionBar" parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse">
<item name="background">@color/list_item_title</item>
<item name="titleTextStyle">@style/MyActionBarTitle</item>
</style>
<style name="MyActionBarTitle" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title">
<item name="android:textColor">@color/list_item_title</item>
</style>
<style name="MyActionBar.MenuTextStyle"
parent="style/TextAppearance.AppCompat.Widget.ActionBar.Title">
<item name="android:textColor">@color/list_item_title</item>
<item name="android:textStyle">normal</item>
<item name="android:textSize">16sp</item>
<item name="android:gravity">center</item>
</style>
и использовать тему приложения в Menifest, как:
<application
android:name="Your Package"
android:allowBackup="true"
android:icon="@drawable/launcher_icon"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<style name="AppTheme1" parent= "android:Theme.DeviceDefault">
<item name="android:actionBarPopupTheme">@style/popupNew</item>
</style>
<style name="popupNew" parent="android:ThemeOverlay.Material.Light">
<item name="android:colorBackground">#ffffff</item>
</style>
вы можете использовать пользовательский макет такой..
PopupMenu pop = new PopupMenu(MainActivity.this, v);
pop.getMenuInflater().inflate(R.menu.main, pop.getMenu());
pop.show();
дизайн макета, как вы хотите..надеюсь, это поможет..