2013-02-27 12 views
7

Widziałem to pytanie:Czy istnieje sposób wyłączenia animacji pokazu/ukrywania ActionBar?

Changing the ActionBar hide animation?

Ale to nie mówi, czy to możliwe, aby wyłączyć animację w ogóle.

+0

Nie sądzę, że to możliwe, aby wyłączyć lub pominąć animacje, ponieważ są one ustalony. Możesz spróbować zmienić swój motyw aktywności na wariant "NoActionBar", jeśli w ogóle nie będziesz potrzebował paska akcji. – ebarrenechea

+0

@ebarrenchea: Nie, naprawdę muszę ukryć i pokazać pasek akcji, a animacja wygląda niezręcznie. –

+0

Niestety, jedyną opcją jest utworzenie własnej niestandardowej implementacji paska działań lub widoku podobnego do tego fragmentu/działania. – ebarrenechea

Odpowiedz

4

Jeśli używasz ActionBarSherlock, możesz to zrobić. Zobacz klasę ActionBarImpl, ma metodę setShowHideAnimationEnabled (boolean enabled).

+2

jak to zrobić w dziale sherlockbar? –

+0

'com.actionbarsherlock.internal.app.ActionBarImpl' jest dzieckiem' com.actionbarsherlock.app.ActionBar' Czy możesz podać nam przykładowy format 'setShowHideAnimationEnabled (boolean)', proszę? –

9

Naprawiłem przy użyciu poniższego sposobu:

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){ 
      //.... 
     } 
    } 
} 
+0

Dzięki! Działa jak urok. – IPv6

+0

Korzystanie z prywatnych metod nie jest dobrym pomysłem, prawdopodobnie zepsuje się w przyszłości. Apple nie zezwala nawet aplikacjom używającym prywatnych metod w sklepie z aplikacjami. –

+3

@ MilošČernernovovský Korzystanie z Androida to zły pomysł. Jest pełen błędów i ograniczeń. Ale nadal wolę hackować ten system operacyjny niż implementować rzeczy od zera –

6

Teraz można to zrobić,

 getSupportActionBar().setShowHideAnimationEnabled(false); 
Powiązane problemy