Има ли начин да деактивирате показването/скриването на анимацията на ActionBar?

Виждал съм този въпрос:

Променяте ли анимацията за скриване на 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(boolean enabled).

person user1275972    schedule 25.08.2013
comment
как да го направя в sherlockbar activty? - person SHASHIDHAR MANCHUKONDA; 29.08.2013
comment
com.actionbarsherlock.internal.app.ActionBarImpl е дете на com.actionbarsherlock.app.ActionBar Бихте ли ни дали вашия пример за setShowHideAnimationEnabled(boolean), моля? - person Maksim Dmitriev; 21.11.2014