android PopupMenu自定义样式
时间: 2023-06-30 18:10:59 浏览: 145
安卓自定义样式
可以通过自定义 PopupMenu 样式来改变 PopupMenu 的外观。以下是一些常见的自定义 PopupMenu 样式:
1. 更改 PopupMenu 的背景颜色和圆角半径:
```xml
<style name="CustomPopupMenuStyle" parent="@style/Widget.AppCompat.PopupMenu">
<item name="android:background">@drawable/popup_menu_bg</item>
<item name="android:radius">8dp</item>
</style>
```
在上面的样式中,`popup_menu_bg` 是一个自定义的背景 drawable,`radius` 设置圆角半径。
2. 更改 PopupMenu 的文字颜色和大小:
```xml
<style name="CustomPopupMenuStyle" parent="@style/Widget.AppCompat.PopupMenu">
<item name="android:textColor">@color/popup_menu_text_color</item>
<item name="android:textSize">16sp</item>
</style>
```
在上面的样式中,`popup_menu_text_color` 是一个自定义的颜色值,`textSize` 设置文字大小。
3. 更改 PopupMenu 的箭头图标:
```xml
<style name="CustomPopupMenuStyle" parent="@style/Widget.AppCompat.PopupMenu">
<item name="android:popupBackground">@drawable/popup_menu_bg</item>
<item name="android:dropDownVerticalOffset">10dp</item>
<item name="android:overlapAnchor">false</item>
<item name="android:popupAnimationStyle">@style/PopupMenuAnimation</item>
</style>
<style name="PopupMenuAnimation">
<item name="android:windowEnterAnimation">@anim/popup_menu_enter</item>
<item name="android:windowExitAnimation">@anim/popup_menu_exit</item>
</style>
```
在上面的样式中,`popup_menu_bg` 是一个自定义的背景 drawable,`dropDownVerticalOffset` 设置 PopupMenu 相对于锚点的垂直偏移量,`overlapAnchor` 设置 PopupMenu 是否覆盖锚点,`popupAnimationStyle` 设置 PopupMenu 的进入和退出动画。`popup_menu_enter` 和 `popup_menu_exit` 是自定义的进入和退出动画。
在自定义样式之后,可以在代码中使用以下方式应用样式:
```java
PopupMenu popupMenu = new PopupMenu(this, anchorView);
popupMenu.getMenuInflater().inflate(R.menu.popup_menu, popupMenu.getMenu());
popupMenu.setOnMenuItemClickListener(menuItem -> {
// 处理菜单项的点击事件
return true;
});
// 应用自定义样式
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
popupMenu.setForceShowIcon(true);
}
popupMenu.setGravity(Gravity.END);
popupMenu.show();
popupMenu.setContentView(R.layout.popup_menu_layout);
popupMenu.setAnchorView(anchorView);
popupMenu.setCallback(new PopupMenu.Callback() {
@Override
public void onShow(PopupMenu menu) {
// 在 PopupMenu 显示之前执行的操作
}
@Override
public void onDismiss(PopupMenu menu) {
// 在 PopupMenu 隐藏之后执行的操作
}
});
popupMenu.setStyle(R.style.CustomPopupMenuStyle);
```
在上面的代码中,`setStyle` 方法用于设置自定义样式。
阅读全文