2013-06-18 8 views
6

मैं एक DrawerLayout के साथ एक गतिविधि है। मैं दराज को दो अलग-अलग तरीकों से खोल सकता हूं ... स्क्रीन के बाएं क्षेत्र से दाईं ओर स्वाइप करके और ऐप शीर्षक पर क्लिक करके। मैं केवल एक शीर्षक DO, नहीं किसी एप्लिकेशन आइकन को प्रदर्शित किया । मैंने इसे Google द्वारा अनुशंसित रूप में कार्यान्वित किया है: Creating a Navigation Drawer: Open and Close with the App Iconकेवल शीर्षक (कोई ऐप्लिकेशन आइकन) के साथ टॉगल DrawerLayout?

सबकुछ दराज को खोलने और बंद करने तक कार्यात्मक है। हालांकि, यह मानक DrawerLayout आइकन कि इस्तेमाल किया जा के लिए लगता है प्रदर्शित नहीं करता है। इसके बजाय मुझे नियमित रूप से देखभाल मिलती है (संकेत से कम की तरह दिखता है)।

जैसे ही मैं एप्लिकेशन आइकन वापस ActionBar यह अपेक्षा के अनुरूप काम शुरू होता है में जोड़ने के रूप में। दराज लेआउट आइकन प्रदर्शित होता है और जब ड्रावर खोला जाता है या बंद होता है तो एनिमेट करता है। मैंने अपनी शैलियों एक्सएमएल फ़ाइल और प्रोग्रामेटिक रूप से दोनों ऐप आइकन को हटाने का प्रयास किया है।

क्या ऐप आइकन के बिना DrawerLayout आइकन काम करने का कोई तरीका है ???

अद्यतन: मुझे एक काम मिल गया है, लेकिन यह समाधान से कहीं अधिक हैक है। मैं बस एक 1x1 पिक्सेल पारदर्शी PNG (blank.png) बनाया और मेरे styles.xml फ़ाइल में मेरी एप्लिकेशन आइकन के रूप में यह निर्धारित किया है। नीचे सभी रिश्तेदार कोड है:

styles.xml

<style name="MyCustomTheme" parent="android:Theme.Holo.Light.DarkActionBar"> 
    <item name="android:actionBarStyle">@style/MyCustomActionBar</item> 
    <item name="android:icon">@drawable/blank</item> 
</style> 

<style name="MyCustomActionBar" parent="@android:style/Widget.Holo.ActionBar"> 
    <item name="android:displayOptions">showHome|showTitle|homeAsUp</item> 
</style> 

MainActivity -> onCreate()

this.navDrawerToggle = new ActionBarDrawerToggle 
(
    this, 
    this.navDrawerLayout, 
    R.drawable.icon_nav_drawer, 
    R.string.nav_drawer_open, 
    R.string.nav_drawer_closed 
) 
{ 
    public void onDrawerClosed(View view) {} 
    public void onDrawerOpened(View drawerView) {} 
}; 

MainActivity -> onPostCreate()

super.onPostCreate(savedInstanceState); 
this.navDrawerToggle.syncState(); 

MainActivity -> onResume()

this.navDrawer.setOnItemClickListener(new DrawerItemClickListener()); 
this.navDrawerLayout.setDrawerListener(this.navDrawerToggle); 

MainActivity -> onPause()

this.navDrawer.setOnItemClickListener(null); 
this.navDrawerLayout.setDrawerListener(null); 

MainActivity -> onConfigurationChanged (विन्यास newConfig)

super.onConfigurationChanged(newConfig); 
navDrawerToggle.onConfigurationChanged(newConfig); 

MainActivity -> onOptionsItemSelected (MenuItem आइटम)

if (this.navDrawerToggle.onOptionsItemSelected(item)) {return true;} 
else 
{ 
    // A bunch of item click handling happens here... 

    return true; 
} 
+1

अगली बार, एक साइड नोट के रूप में, कृपया यह जानने के लिए कुछ कोड जोड़ें कि आप क्या खराब हैं राजा के साथ – velazcod

+0

क्षमा करें ... कोड पोस्ट किया गया! – Jabari

+0

नीचे मेरा अपडेट देखें। शैली पर सेट करने की कोशिश करने के बजाय setDisplayOptions का उपयोग करना इसे ठीक करता है। – velazcod

उत्तर

0

getActionBar().setIcon(android.R.color.transparent);

यह मेरे लिए काम किया .. ...;)

+0

वापस जब मैंने इसे पोस्ट किया (एंड्रॉइड पहले के कुछ संस्करण), तो मैंने कोशिश की पहली चीजों में से एक था। यह कार्यात्मक रूप से काम करता था, लेकिन आइकन अभी भी एक ही जगह ले लिया। क्या अब यह मामला नहीं है? यदि नहीं, तो परीक्षण के बाद मैं इसे नया स्वीकार्य उत्तर दूंगा। – Jabari

+0

आप किस संस्करण के बारे में बात कर रहे हैं। मैंने 5.1 (लॉलीपॉप) और 4.4.2 (किट कट) दोनों पर काम किया ठीक काम किया। – karan

+0

यह पोस्ट 2 साल से अधिक पुराना है, और मैं पिछड़ा संगत रहने की कोशिश कर रहा था, इसलिए आइसक्रीम सैंडविच और जिंजरब्रेड (मुझे होनकोम्ब की परवाह नहीं थी)। उत्तर स्वीकार किया गया! – Jabari

13

मैं इस बारे में उत्सुक था तो मैं DrawerLayout के लिए नमूने के साथ यह कोशिश की और यह ठीक काम किया। साथ ही, ऐसा लगता है कि आपको अपने स्वयं के दराज आइकन को खींचने योग्य उपयोग करना है, फिर भी इसकी अनुशंसा की जाती है। आप इस साइट से Creating a Navigation Drawer से डिफ़ॉल्ट संपत्तियां डाउनलोड कर सकते हैं और उन्हें अपने संबंधित ड्रॉइंग संसाधन फ़ोल्डर में डाल सकते हैं।

यहाँ क्या मेरे लिए काम किया है:

ActionBar actionBar = getActionBar(); 

// Let's get rid of the app icon here 
actionBar.setIcon(null); 
actionBar.setTitle("App Name"); 

// Setting these 3 options allows us to show the title as well as a "Home" elements 
// "Home" elements include the Up and/or Drawer icon. The DISPLAY_HOME_AS_UP will enable 
// and show the Drawer icon, we'll be "replacing" the "up" button with the drawer icon below 
actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_TITLE 
     | ActionBar.DISPLAY_SHOW_HOME 
     | ActionBar.DISPLAY_HOME_AS_UP); 

// Get a reference of the DrawerLayout 
DrawerLayout drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 
drawerLayout.setDrawerListener(drawerToggle); 

// Setting ActionBarDrawerToggle will allow you to set the drawables for the drawer 
// (this will also give you the nice/smooth animation) as well as allow you to do some 
// other things depending on the events: onDrawerClosed & onDrawerOpened. 
ActionBarDrawerToggle drawerToggle = new ActionBarDrawerToggle(
      this,     /* host Activity */ 
      drawerLayout,   /* DrawerLayout object */ 
      R.drawable.ic_drawer, /* nav drawer image to replace 'Up' caret */ 
      R.string.drawer_open, /* "open drawer" description for accessibility */ 
      R.string.drawer_closed /* "close drawer" description for accessibility */ 
    ) { 
    public void onDrawerClosed(View view) { 
     actionBar.setTitle("Closed..."); 
     invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() 
    } 

    public void onDrawerOpened(View drawerView) { 
     actionBar.setTitle("Open..."); 
     invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() 
    } 
}; 

// Set a listener to be notified of drawer events. 
drawerLayout.setDrawerListener(drawerToggle); 

अद्यतन: यह एंड्रॉयड की तरह लगता है: ActionBar शैली पर displayOptions लिए जिम्मेदार नहीं किया जा रहा है। इसके बजाय actionBar.setDisplayOptions (int विकल्प) का उपयोग करें।

mDrawerToggle.syncState(); 

तो अपने कोड इस प्रकार दिखाई देगा:

+1

जो आपने ऊपर सूचीबद्ध किया है वह वही है जो मैंने दो चीजों को छोड़कर लागू किया है। 1) मैंने 'actionbar.setIcon (शून्य)' का उपयोग नहीं किया था। इसके बजाय, मैंने 'actionbar.setDisplayShowHomeEnabled (false)' का उपयोग किया। 2) अंततः मैंने एक्शनबार को प्रोग्रामेटिक रूप से बदल दिया और उन्हें डिस्प्ले विकल्पों सहित, मेरी शैलियों.एक्सएमएल फाइल में बदल दिया। मैं 'actionbar.setIcon (null)' जोड़ने जा रहा हूं और देखें कि क्या होता है ... – Jabari

+0

setDisplayShowHomeEnabled (false) विकल्प के बारे में है जैसा कि ActionBar.DISPLAY_SHOW_HOME विकल्प नहीं है। आपको या तो डिस्प्लेशोहोम सक्षम (सत्य) सेट करने या विकल्प सेट करने की आवश्यकता है। – velazcod

+0

अभी भी मेरे लिए काम नहीं किया है। क्या आप एक्शनबार शेरलॉक का उपयोग कर रहे हैं (मैं नहीं हूं)। मैं भी 4.2.2 चला रहा हूँ। मैंने पहले से ही 'setDisplayShowHomeEnabled (false) 'हटा दिया था। मुझे एक अस्थायी समाधान मिला है ... मैंने बस एक 1x1 पीएक्स पारदर्शी पीएनजी बनाया और इसे मेरे ऐप आइकन (शैलियों.एक्सएमएल फाइल के माध्यम से) के रूप में इस्तेमाल किया। यह सिर्फ एक हैक की तरह लगता है। – Jabari

0

दराज की स्थापना टॉगल आप निम्न विधि कॉल करने की आवश्यकता के बाद

mDrawerToggle = new ActionBarDrawerToggle(
      this,     /* host Activity */ 
      mDrawerLayout,   /* DrawerLayout object */ 
      R.drawable.ic_drawer, /* nav drawer image to replace 'Up' caret */ 
      R.string.drawer_open, /* "open drawer" description for accessibility */ 
      R.string.drawer_close /* "close drawer" description for accessibility */ 
      ) { 
     public void onDrawerClosed(View view) { 
      actionBar.setTitle(mTitle); 
      invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() 
     } 


     public void onDrawerOpened(View drawerView) { 
      actionBar.setTitle("Preview Mode"); 
      invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() 
     } 
    }; 

    mDrawerToggle.syncState(); 
    mDrawerLayout.setDrawerListener(mDrawerToggle); 
संबंधित मुद्दे