有没有一种方法可以禁用ActionBar的显示/隐藏动画?

15

我认为不可能禁用或跳过动画,因为它们是硬编码的。如果您根本不需要操作栏,可以尝试将活动主题更改为NoActionBar变体。 - ebarrenechea
@ebarrenchea:不,我真的需要隐藏和显示操作栏,动画看起来很尴尬。 - Violet Giraffe
很遗憾,您唯一的选择是为此片段/活动创建自己的自定义操作栏实现或类似的视图。 - ebarrenechea
1
@IvanMir:好观点。 - Violet Giraffe
3个回答

29

现在你可以这样做,

getSupportActionBar().setShowHideAnimationEnabled(false);

6
直到我把它放在显示和隐藏之前,它才对我起作用... - Mohsin Falak

16

我使用以下方法进行了修复:

public static void disableShowHideAnimation(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);
        }catch (Exception e){
            //....
        }
    }
}

谢谢!运行得很顺利。 - IPv6
使用私有方法并不是一个很好的主意,它很可能会在未来被破坏。苹果甚至不允许在应用商店中使用私有方法的应用程序。 - Miloš Černilovský
5
使用安卓系统是个坏主意。它充满了错误和限制。但我仍然更喜欢黑掉这个破操作系统,而不是从头开始实现事物。 - Alexandre G

4
如果您使用ActionBarSherlock,那么您可以这样做。请参考ActionBarImpl类,它有一个setShowHideAnimationEnabled(boolean enabled)方法。

2
如何在SherlockBar活动中实现? - SHASHIDHAR MANCHUKONDA
com.actionbarsherlock.internal.app.ActionBarImplcom.actionbarsherlock.app.ActionBar 的子类。请问您能否给我们提供 setShowHideAnimationEnabled(boolean) 的示例? - Maksim Dmitriev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接