2014-10-20 22 views
33

के साथ बर्गर टू एरो एनिमेट करें मैं एंड्रॉइड.support.v7.widget.DrawerLayout के साथ android.support.v7.widget.Toolbar का उपयोग कर रहा हूं। यह ठीक काम करता है, जब नेविगेशन ड्रॉवर बंद होता है तो बर्गर आइकन दिखाया जाता है, और ड्रॉवर खुला होने पर तीर आइकन दिखाया जाता है। मैं ड्रॉवर को अक्षम करना चाहता हूं और ऐप में कुछ ईवेंट पर बर्गर आइकन को एरो में एनिमेट करना चाहता हूं। मैंने लॉक मोड को बंद करने की कोशिश की है, लेकिन v7.app.ActionBarDrawerToggle अभी भी बर्गर दिखा रहा है और यह दराज खोलता है।एपकोम्पेट v7 21, टूलबार और ड्रॉवरलाइट

mDrawerLayout.setDrawerLockMode (DrawerLayout.LOCK_MODE_LOCKED_CLOSED);

कोई विचार? धन्यवाद!

अद्यतन:

नहीं, मैं आइकन के राज्य को बदल सकते हैं और मैं सक्षम कर सकते हैं/दराज को निष्क्रिय है, लेकिन एनिमेशन इस दृष्टिकोण के साथ काम नहीं कर रहे:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    ... 
    Toolbar toolbar = (Toolbar) findViewById(R.id.application_toolbar); 
    setSupportActionBar(toolbar); 

    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout); 
    mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.string.string1, R.string.string2) { 
     public void onDrawerClosed(View view) { 
      super.onDrawerClosed(view); 
     } 

     public void onDrawerOpened(View drawerView) { 
      super.onDrawerOpened(drawerView); 
     } 
    }; 

    //mDrawerLayout.setDrawerListener(mDrawerToggle); // not needed 
    ... 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 

    switch (item.getItemId()) { 
     case android.R.id.home: 
      if (mDrawerLayout.getDrawerLockMode(GravityCompat.START) == LOCK_MODE_UNLOCKED) { 
       showDrawer(); 
      } else { 
       handleBackButtonPress(); // On this stage the home button is a <- 
      } 
    } 
    ... 
} 

private void setDrawerState(boolean isEnabled) { 
    if (isEnabled) { 
     mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED); 
     mDrawerToggle.onDrawerStateChanged(DrawerLayout.LOCK_MODE_UNLOCKED); 
     mDrawerToggle.syncState(); 

    } else { 
     mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED); 
     mDrawerToggle.onDrawerStateChanged(DrawerLayout.LOCK_MODE_LOCKED_CLOSED); 
     mDrawerToggle.syncState(); 
    } 
} 

दराज आता है टूलबार के शीर्ष पर।

उत्तर

36

यहां एक नज़र डालें, यह बताता है कि आप इसे कैसे हल करते हैं।

https://stackoverflow.com/a/26447144

अनिवार्य हिस्सा है निम्नलिखित:

<style name="AppTheme" parent="Theme.AppCompat.Light"> 
    <item name="drawerArrowStyle">@style/DrawerArrowStyle</item> 
</style> 

<style name="DrawerArrowStyle" parent="Widget.AppCompat.DrawerArrowToggle"> 
    <item name="spinBars">true</item> 
    <item name="color">@android:color/white</item> 
</style> 
+0

अपने कोड का एक विवरण छोड़ दें .. – Haris

+1

धन्यवाद , लेकिन मुझे लगता है कि आप मेरे प्रश्न को गलत समझते हैं। मैं नेविगेशन ड्रॉवर (रन-टाइम पर) को पूरी तरह अक्षम करना चाहता हूं और बर्गर के बजाय तीर आइकन दिखा सकता हूं। – user2298916

+0

मुझे एक ही समस्या है? –

29

मैं एक छोटे से आवेदन जो इसी तरह की सुविधा के लिए किया था बनाया

MainActivity

public class MyActivity extends ActionBarActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_my); 

     DrawerLayout drawerLayout = (DrawerLayout) findViewById(R.id.drawer); 
     android.support.v7.widget.Toolbar toolbar = (android.support.v7.widget.Toolbar) findViewById(R.id.toolbar); 
     ActionBarDrawerToggle actionBarDrawerToggle = new ActionBarDrawerToggle(
       this, 
       drawerLayout, 
       toolbar, 
       R.string.open, 
       R.string.close 
     ) 

     { 
      public void onDrawerClosed(View view) 
      { 
       super.onDrawerClosed(view); 
       invalidateOptionsMenu(); 
       syncState(); 
      } 

      public void onDrawerOpened(View drawerView) 
      { 
       super.onDrawerOpened(drawerView); 
       invalidateOptionsMenu(); 
       syncState(); 
      } 
     }; 
     drawerLayout.setDrawerListener(actionBarDrawerToggle); 

     //Set the custom toolbar 
     if (toolbar != null){ 
      setSupportActionBar(toolbar); 
     } 

     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

     actionBarDrawerToggle.syncState(); 
    } 
} 

कि गतिविधि

मेरे एक्सएमएल
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".MyActivity" 
    android:id="@+id/drawer" 
    > 

    <!-- The main content view --> 
    <FrameLayout 
     android:id="@+id/content_frame" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" > 
     <include layout="@layout/toolbar_custom"/> 
    </FrameLayout> 
    <!-- The navigation drawer --> 
    <ListView 
     android:layout_marginTop="?attr/actionBarSize" 
     android:id="@+id/left_drawer" 
     android:layout_width="240dp" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     android:choiceMode="singleChoice" 
     android:divider="@android:color/transparent" 
     android:dividerHeight="0dp" 
     android:background="#457C50"/> 


</android.support.v4.widget.DrawerLayout> 

मेरा कस्टम टूलबार एक्सएमएल

<?xml version="1.0" encoding="utf-8"?> 

<android.support.v7.widget.Toolbar 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/toolbar" 
    android:background="?attr/colorPrimaryDark"> 
    <TextView android:text="U titel" 
     android:textAppearance="@android:style/TextAppearance.Theme" 
     android:textColor="@android:color/white" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     /> 
</android.support.v7.widget.Toolbar> 

मेरे विषय शैली

<resources> 
    <style name="AppTheme" parent="Base.Theme.AppCompat"/> 

    <style name="AppTheme.Base" parent="Theme.AppCompat"> 
     <item name="colorPrimary">@color/primary</item> 
     <item name="colorPrimaryDark">@color/primaryDarker</item> 
     <item name="android:windowNoTitle">true</item> 
     <item name="windowActionBar">false</item> 
     <item name="drawerArrowStyle">@style/DrawerArrowStyle</item> 
    </style> 

    <style name="DrawerArrowStyle" parent="Widget.AppCompat.DrawerArrowToggle"> 
     <item name="spinBars">true</item> 
     <item name="color">@android:color/white</item> 
    </style> 

    <color name="primary">#457C50</color> 
    <color name="primaryDarker">#580C0C</color> 
</resources> 

मान-V21 में मेरे शैलियाँ

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <style name="AppTheme" parent="AppTheme.Base"> 
     <item name="android:windowContentTransitions">true</item> 
     <item name="android:windowAllowEnterTransitionOverlap">true</item> 
     <item name="android:windowAllowReturnTransitionOverlap">true</item> 
     <item name="android:windowSharedElementEnterTransition">@android:transition/move</item> 
     <item name="android:windowSharedElementExitTransition">@android:transition/move</item> 
    </style> 
</resources> 
+2

आह, मैं तुमसे प्यार करता हूँ। मैं लानत तीर एनीमेशन पाने के लिए struggeled। हालांकि, आपके कोड को देखते हुए मैंने पाया कि मेरा यह लाइन गायब था: drawerLayout.setDrawerListener (actionBarDrawerToggle); अब यह एक आकर्षण की तरह काम करता है! – Kenneth

+2

प्लस वन, विस्तृत कोड के लिए ... –

+0

क्या एक्शनबार एक्टिविटी से विस्तार करना आवश्यक है? – Skynet

संबंधित मुद्दे