【问题标题】:How to build a fast-reacting overflow dropdown menu?如何构建快速反应的溢出下拉菜单?
【发布时间】:2018-09-08 17:03:47
【问题描述】:
Anroid 的默认溢出菜单无法正确响应快速点击。当我双击下拉菜单时,我想打开菜单,然后单击其中的第一项。但是默认的溢出菜单总是把我的第二次点击放在其他地方。
在上面的 gif 中,第二次点击总是落在第 4 项上(第 1 项是 'commit',第 4 项是 'save as')
但是,在 ebdic 或 chrome 等应用中,溢出菜单会响应快速点击:
P.S.,android:popupAnimationStyle 和 android:windowAnimationStyle 在这里没用。
【问题讨论】:
标签:
android
drop-down-menu
overflow-menu
【解决方案1】:
在您的点击之间设置延迟。 android UI 旨在以人类的速度工作,菜单展开并且人类选择结果。它并不意味着以自动化 UI 最大速度工作。这不是他们要修复的错误。
另外,您不能使用内置菜单功能并为其编写自己的 UI,这可能是 Chrome 所做的,因为 Chrome 早于溢出菜单。但我认为这不值得。
【解决方案2】:
经过将近 3 个小时的挫折,我现在有了自己的答案 :)
一开始溢出菜单的行为不同;我可以非常快速地点击并在 android 4.4 的默认溢出菜单上获得预期的结果。但在更高版本中,默认行为会发生变化。
是的,使用 AnimationStyle 我对此无能为力,而是应该调整 actionOverflowMenuStyle。
<style name="toolbarTheme" parent="AppTheme">
<item name="android:textColorSecondary">@android:color/white</item>
<item name="colorAccent">@color/colorHeaderBlue</item>
<item name="actionOverflowMenuStyle">@style/OverflowMenuStyle</item>
<!--item name="android:popupBackground">@android:color/white</item-->
<item name="android:popupBackground">@drawable/round_corner_card1_1cor</item>
</style>
<style name="OverflowMenuStyle">
<item name="overlapAnchor">true</item>
<item name="android:dropDownVerticalOffset">0dip</item>
<item name="android:dropDownHorizontalOffset">0dip</item>
</style>
注意OverflowMenuStyle的父主题,留空,或者设置为“Base.Widget.AppCompat.ListView.Menu”。
结果: