正如您所看到的,背景在弹出窗口后面扭曲了。它只发生在棒棒糖上!请不要被我的样式文件中的所有x_弄糊涂。我刚刚对代码进行了去标记。
在主题文件中:
<style name="core" parent="Theme.AppCompat.Light">
<!-- Popup menu -->
<item name="android:popupMenuStyle">@style/x_popup_menu_theme</item>
<item name="android:textAppearanceSmallPopupMenu">@style/x_popup_menu_small_text</item>
<item name="android:textAppearanceLargePopupMenu">@style/x_popup_menu_large_text</item>
</style>
在v21 / themes_styles.xml
中<style name="x_popup_menu_theme" parent="Widget.AppCompat.PopupMenu">
<item name="android:popupBackground">@color/x_navy_dark</item>
</style>
<style name="x_popup_menu_large_text" parent="TextAppearance.AppCompat.Widget.PopupMenu.Large">
<item name="android:textColor">@color/std_white</item>
</style>
<style name="x_popup_menu_small_text" parent="TextAppearance.AppCompat.Widget.PopupMenu.Small">
<item name="android:textColor">@color/std_white</item>
</style>
如果我将样式更改/删除,则其工作方式如下图所示。
<style name="x_popup_menu_theme" parent="Widget.AppCompat.PopupMenu">
</style>
<style name="x_popup_menu_large_text" parent="TextAppearance.AppCompat.Widget.PopupMenu.Large">
</style>
<style name="x_popup_menu_small_text" parent="TextAppearance.AppCompat.Widget.PopupMenu.Small">
</style>
答案 0 :(得分:7)
Android 5.0.x中有一个错误(已在5.1中修复),在高架窗口中设置不透明(例如@color
)背景会导致视觉瑕疵。
作为5.0.x设备的变通方法,您可以将背景设置为非不透明的可绘制对象,例如圆角矩形。
RES /抽拉/ my_popup_bg.xml:
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="2dp" />
<solid android:color="@color/x_navy_dark" />
</shape>
RES /值/ styles.xml:
...
<style name="x_popup_menu_theme" parent="Widget.AppCompat.PopupMenu">
<item name="android:popupBackground">@drawable/my_popup_bg</item>
</style>
答案 1 :(得分:-1)
[编辑 - 删除了建议关闭硬件加速的原始答案]
看来这是带有帧缓冲区的android 5.0中的一个错误。它已在Android 5.1中修复。 Bug listing
以下是Chet Haase关于如何解决这个问题的消息:
触发器是您将弹出窗口的背景设置为颜色,该颜色解析为彩色矩形。您应该使用圆角矩形(如默认样式使用),或者更好的是,使用深色主题而不是自定义颜色。 错误[在android中]([在5.1中修复])是我们没有考虑阴影的填充,并且在这种情况下没有在窗口中设置正确的半透明标志。
现在我只是使用linearlayout创建了自己的弹出菜单,并手动处理了点击和后退按钮。不是太优雅,但它与艺术团队想要的比弹出菜单更接近。
<LinearLayout
android:id="@id/fake_popup"
android:layout_below="@id/pending"
android:visibility="gone"
android:layout_width="match_parent"
android:layout_height="wrap_content" android:orientation="vertical">
<TextView
style="@style/button.dropdown"
android:id="@id/send_reminder"
android:background="@color/navy_dark"
android:textColor="@color/std_white"
android:text="@string/send_reminder"/>
<TextView
style="@style/button.dropdown"
android:id="@id/withdraw_invite"
android:background="@color/navy_dark"
android:textColor="@color/std_white"
android:text="@string/withdraw_invite"/>
</LinearLayout>
处理点击以显示/隐藏菜单(注意注释是ButterKnife):
@OnClick (R.id.pending) public void showPendingActionsMenu () {
// pendingActionsPopupMenu.show ();
if (pendingPopup.isShown ()) {
hidePendingPopup ();
} else {
showPendingPopup ();
}
}
并处理各个选项的点击次数:
@OnClick (R.id.send_reminder)
public void sendReminder () { //your code here }
不要忘记覆盖onBackPressed!
@Override public void onBackPressed () {
if (pendingPopup.isShown ()) {
hidePendingPopup ();
} else {
super.onBackPressed ();
}
}