2013-06-18 7 views
6

Ich habe eine Aktivität mit einem . Ich kann die Schublade auf zwei verschiedene Arten öffnen ... indem ich vom linken Bildschirmbereich nach rechts wische und auf den App-Titel klicke. I DO NOT haben ein App-Symbol angezeigt, nur ein Titel. Ich habe das genau so implementiert, wie von Google empfohlen: Creating a Navigation Drawer: Open and Close with the App IconToggle DrawerLayout nur mit Titel (kein App-Symbol)?

Alles ist funktionell, was das Öffnen und Schließen der Schublade selbst angeht. Es wird jedoch nicht das Standardsymbol DrawerLayout angezeigt, das verwendet werden soll. Stattdessen bekomme ich die regelmäßige Hochkartierung (sieht aus wie ein weniger als Zeichen).

Sobald ich das App-Symbol zurück zu ActionBar hinzufügen beginnt es wie erwartet zu arbeiten. Das Schubladenlayout-Symbol wird angezeigt und animiert, wenn die Schublade geöffnet oder geschlossen wird. Ich habe versucht, das App-Symbol sowohl in meiner XML-Datei als auch programmatisch zu entfernen.

Gibt es eine Möglichkeit, das Symbol funktioniert OHNE das App-Symbol zu bekommen ???

UPDATE: Ich habe eine Arbeit gefunden, aber es ist ein Hack mehr als eine Lösung. Ich habe einfach ein transparentes PNG mit 1 x 1 Pixel (blank.png) erstellt und es als mein App-Symbol in meiner Datei styles.xml festgelegt. Im Folgenden finden Sie alle relativen Code:

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 (Configuration newconfig)

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

MainActivity -> onOptionsItemSelected (MenuItem Artikel)

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

    return true; 
} 
+1

Als Randnotiz, für das nächste Mal, fügen Sie bitte einen Code hinzu, um zu wissen, woran Sie arbeiten König mit. – velazcod

+0

Sorry ... Code veröffentlicht! – Jabari

+0

Siehe mein Update unten. Die Verwendung von setDisplayOptions, anstatt zu versuchen, sie auf den Stil zu setzen, behebt es. – velazcod

Antwort

0

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

Das ist für mich gearbeitet .. ...;)

+0

Als ich das (ein paar Versionen von Android) gepostet habe, war das eines der ersten Dinge, die ich ausprobiert habe. Es funktionierte funktional, aber die Ikone nahm immer noch den gleichen Platz ein. Ist das jetzt nicht der Fall? Wenn nicht, mache ich dies nach dem Testen zur neuen akzeptierten Antwort. – Jabari

+0

welche Version Sie sprechen. Ich testete auf 5.1 (Lolipop) und 4.4.2 (Kit Kat) beide gut funktioniert. – karan

+0

Dieser Beitrag ist über 2 Jahre alt und ich habe versucht, rückwärtskompatibel zu bleiben, also Ice Cream Sandwich und Gingerbread (mir war Honeycomb egal). Antwort angenommen! – Jabari

13

Ich war neugierig auf diesem so versuchte ich es mit der Probe für den DrawerLayout und es funktionierte gut. Außerdem scheint es, als ob Sie Ihr eigenes Drawer-Icon drawbar verwenden müssen, es wird trotzdem empfohlen. Sie können die Standard-Assets von dieser Site Creating a Navigation Drawer herunterladen und sie in ihren jeweiligen aufzeichnbaren Ressourcenordner stellen.

Hier ist, was für mich gearbeitet:

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); 

UPDATE: Es scheint, wie die Android-Version: displayoptions auf dem ActionBar Stil sind nicht berücksichtigt werden. Verwenden Sie stattdessen actionBar.setDisplayOptions (int-Optionen).

+1

Was Sie oben aufgelistet haben, ist fast genau das, was ich bis auf zwei Dinge implementiert habe. 1) Ich habe 'actionbar.setIcon (null)' nicht benutzt. Stattdessen habe ich 'actionbar.setDisplayShowHomeEnabled (false)' verwendet. 2) Ich verwarf schließlich das Ändern der ActionBar programmgesteuert und änderte sie stattdessen in meiner styles.xml-Datei, einschließlich der Anzeigeoptionen. Ich werde die 'actionbar.setIcon (null)' hinzufügen und sehen, was passiert ... – Jabari

+0

setDisplayShowHomeEnabled (false) ist etwa das gleiche wie nicht mit der Option ActionBar.DISPLAY_SHOW_HOME. Sie müssen entwederDisplayShowHomeEnabled (true) festlegen oder die Option festlegen. – velazcod

+0

Funktionierte immer noch nicht für mich. Verwenden Sie ActionBarSherlock (ich bin nicht). Ich laufe auch 4.2.2. Ich hatte 'setDisplayShowHomeEnabled (false)' bereits entfernt. Ich habe eine temporäre Lösung gefunden ... Ich habe einfach ein transparentes PNG von 1x1 px erstellt und es als mein App-Symbol verwendet (über die Datei styles.xml). Es fühlt sich einfach an wie ein Hack. – Jabari

0

Nach der Schublade Einstellung Toggle Sie die folgende Methode aufrufen müssen:

mDrawerToggle.syncState(); 

so Ihr Code würde wie folgt aussehen:

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);