2013-02-27 176 views
7

मैं इस सवाल को देखा है:क्या एक्शनबार के शो/छुपा एनीमेशन को अक्षम करने का कोई तरीका है?

Changing the ActionBar hide animation?

लेकिन यह नहीं कह चाहे वह एनीमेशन पूरी तरह निष्क्रिय करने के लिए संभव है है।

+0

मैं उसे निष्क्रिय या एनिमेशन को छोड़, क्योंकि वे हार्डकोडेड हैं संभव है नहीं लगता। यदि आपको एक्शन बार की आवश्यकता नहीं है तो आप अपनी गतिविधि थीम को 'नोएक्शनबार' संस्करण में बदलने का प्रयास कर सकते हैं। – ebarrenechea

+0

@ebarrenchea: नहीं, मुझे वास्तव में एक्शन बार को छुपाने और दिखाने की ज़रूरत है, और एनीमेशन अजीब दिखता है। –

+0

दुर्भाग्यवश, आपका एकमात्र विकल्प इस स्वयं के कस्टम एक्शन बार कार्यान्वयन या इस खंड/गतिविधि के लिए एक समान दिखने वाला दृश्य बनाना होगा। – ebarrenechea

उत्तर

4

यदि आप एक्शनबार शेरलॉक का उपयोग करते हैं तो आप इसे कर सकते हैं। ActionBarImpl क्लास देखें, इसमें setShowHideAnimationEnabled (बूलियन सक्षम) विधि है।

+2

शेरलॉकबार सक्रियता में इसे कैसे करें? –

+0

'com.actionbarsherlock.internal.app.ActionBarImpl'' com.actionbarsherlock.app.ActionBar 'का एक बच्चा है, क्या आप हमें' setShowHideAnimationEnabled (बूलियन) 'का अपरिवर्तनीय बना सकते हैं, कृपया? –

9

मैं नीचे पद्धति का उपयोग करके तय:

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

धन्यवाद! एक आकर्षण की तरह काम करता है – IPv6

+0

निजी तरीकों का उपयोग करना बहुत अच्छा विचार नहीं है, यह शायद भविष्य में टूटा जाएगा। ऐप्पल ऐप स्टोर में निजी तरीकों का उपयोग करने वाले ऐप्स को भी अनुमति नहीं देता है। –

+3

@ एंड्रॉइड का उपयोग कर MilošČernilovský एक बुरा विचार है। यह बग और सीमाओं से भरा है। लेकिन मैं अभी भी स्क्रैच से चीजों को लागू करने के बजाय ऑपरेटिंग सिस्टम के इस हैक को हैक करना पसंद करता हूं –

6

अब आप यह कर सकते हैं,

 getSupportActionBar().setShowHideAnimationEnabled(false);