ActionBar compat 如何禁用ActionBar的显示/隐藏动画

ActionBar compat 如何关闭ActionBar的显示隐藏动画

@Override

    public boolean onCreateOptionsMenu(Menu menu) {

        //消除动画效果

        disableABCShowHideAnimation(getSupportActionBar());

        return super.onCreateOptionsMenu(menu);

    }

 public static void disableABCShowHideAnimation(ActionBar actionBar) {

        try

        {

            actionBar.getClass().getDeclaredMethod("setShowHideAnimationEnabled", boolean.class).invoke(actionBar, false);

        }

        catch (Exception exception)

        {

            try {

                Field mActionBarField = actionBar.getClass().getSuperclass().getDeclaredField("mActionBar");

                mActionBarField.setAccessible(true);

                Object icsActionBar = mActionBarField.get(actionBar);

                Field mShowHideAnimationEnabledField = icsActionBar.getClass().getDeclaredField("mShowHideAnimationEnabled");

                mShowHideAnimationEnabledField.setAccessible(true);

                mShowHideAnimationEnabledField.set(icsActionBar,false);

                Field mCurrentShowAnimField = icsActionBar.getClass().getDeclaredField("mCurrentShowAnim");

                mCurrentShowAnimField.setAccessible(true);

                mCurrentShowAnimField.set(icsActionBar,null);

                //icsActionBar.getClass().getDeclaredMethod("setShowHideAnimationEnabled", boolean.class).invoke(icsActionBar, false);

            }catch (Exception e){

                //....

            }

        }

    }

 

其实在ActionBar的实现中时有setShowHideAnimationEnabled这个方法来控制动画显示的。

但是ActionBar这一抽象类不提供这一功能

posted @ 2014-06-14 15:48 lsjwzh 阅读(...) 评论(...) 编辑 收藏