Есть ли способ отключить анимацию отображения/скрытия ActionBar?

Я видел этот вопрос:

Изменение анимации скрытия панели действий?

Но не сказано, можно ли вообще отключить анимацию.


person Violet Giraffe    schedule 27.02.2013    source источник
comment
Я не думаю, что можно отключить или пропустить анимацию, поскольку она жестко запрограммирована. Вы можете попробовать изменить тему активности на вариант NoActionBar, если вам вообще не нужна панель действий.   -  person ebarrenechea    schedule 27.02.2013
comment
@ebarrenchea: Нет, мне действительно нужно скрыть и показать панель действий, а анимация выглядит неудобно.   -  person Violet Giraffe    schedule 27.02.2013
comment
К сожалению, ваш единственный вариант — создать свою собственную реализацию пользовательской панели действий или похожее представление для этого фрагмента/активности.   -  person ebarrenechea    schedule 27.02.2013
comment
@IvanMir: Хороший вопрос.   -  person Violet Giraffe    schedule 05.09.2018


Ответы (3)


Теперь вы можете сделать это,

getSupportActionBar().setShowHideAnimationEnabled(false);
person Tyler Pfaff    schedule 07.07.2016
comment
У меня это не работало, пока я не поместил его прямо перед тем, как показать и скрыть... Спасибо. - person Mohsin Falak; 10.12.2019

Я исправил, используя метод ниже:

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){
            //....
        }
    }
}
person Kani    schedule 14.07.2014
comment
Спасибо! Работает как шарм - person IPv6; 13.08.2014
comment
Использование приватных методов — не очень хорошая идея, возможно, в будущем она сломается. Apple даже не позволяет приложениям использовать частные методы в магазине приложений. - person Miloš Černilovský; 04.02.2015
comment
@MilošČernilovský Использование Android — плохая идея. Он полон ошибок и ограничений. Но я все же предпочитаю взломать этот хак операционной системы, а не реализовывать что-то с нуля. - person Alexandre G; 12.05.2016

Если вы используете ActionBarSherlock, вы можете это сделать. См. класс ActionBarImpl, он имеет метод setShowHideAnimationEnabled (логический включен).

person user1275972    schedule 25.08.2013
comment
как это сделать в шерлокбаре? - person SHASHIDHAR MANCHUKONDA; 29.08.2013
comment
com.actionbarsherlock.internal.app.ActionBarImpl является ребенком com.actionbarsherlock.app.ActionBar Не могли бы вы привести пример setShowHideAnimationEnabled(boolean), пожалуйста? - person Maksim Dmitriev; 21.11.2014