如何禁用菜单弹出动画

How to disable menu popup animation

我用下面的代码创建菜单,当我点击按钮时,它显示弹出动画,如何禁用它?

    setContentView(R.layout.activity_test_create_menu_in_code);

    View b = findViewById(R.id.b);
    final PopupMenu m = new PopupMenu(this, b);
    m.getMenu().add(0, 1, 0, "Create");
    b.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            m.show();
        }
    });

可以根据您的风格更改弹出动画:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="android:popupAnimationStyle">@null</item>
</style>
<style name="NoPopupAnimation" parent="Widget.AppCompat.PopupMenu">
    <item name="android:popupAnimationStyle">@null</item>
</style>

并且:

Context wrapper = new ContextThemeWrapper(this, R.style.NoPopupAnimation);
PopupMenu popup = new PopupMenu(wrapper, view, Gravity.END);

使用这种方式你不需要改变整个样式activity。例如,在我的案例中,Popup 动画在华为设备上存在问题。所以我只需要为华为禁用动画。我是这样做的:

Context wrapper = this;
if ("huawei".equalsIgnoreCase(android.os.Build.MANUFACTURER)) {
    wrapper = new ContextThemeWrapper(context, R.style.NoPopupAnimation);
}
PopupMenu popup = new PopupMenu(wrapper, view, Gravity.END);