1

Ich möchte eine feste Mini-Nav-Schublade in Android bauen. Wille ist immer sichtbar und nicht erweiterbar, nur mit Symbolen.Android bauen Mini-Navigationsschublade mit Icons

So etwas wie https://github.com/mikepenz/MaterialDrawer Mini-Schublade. Ich habe versucht, seine Bibliothek zu verwenden, aber ich kann nicht herausfinden, wie es behoben werden kann.

hier ist mein Code:

private Drawer result = null; 
private MiniDrawer miniResult = null; 


result = new DrawerBuilder() 
       .withActivity(this) 
       .withToolbar(toolbar) 
       .withTranslucentStatusBar(false) 
       .addDrawerItems(
         new PrimaryDrawerItem().withName("1").withIcon(FontAwesome.Icon.faw_home).withIdentifier(1), 
         new PrimaryDrawerItem().withName("2").withIcon(FontAwesome.Icon.faw_home).withBadge("22").withBadgeStyle(new BadgeStyle(Color.RED, Color.RED)).withIdentifier(2).withSelectable(false), 
          new DividerDrawerItem(), 
         new ToggleDrawerItem().withName("3").withIcon(FontAwesome.Icon.faw_home).withChecked(true).withOnCheckedChangeListener(onCheckedChangeListener) 
       ) // add the items we want to use with our Drawer 
       .withOnDrawerItemClickListener(new Drawer.OnDrawerItemClickListener() { 
        @Override 
        public boolean onItemClick(View view, int position, IDrawerItem drawerItem) { 
         if (drawerItem instanceof Nameable) { 
          Toast.makeText(MainActivity.this, ((Nameable) drawerItem).getName().getText(MainActivity.this), Toast.LENGTH_SHORT).show(); 
         } 
         return false; 
        } 
       }) 
       .withGenerateMiniDrawer(true) 
       .withSavedInstance(savedInstanceState) 
       // build only the view of the Drawer (don't inflate it automatically in our layout which is done with .build()) 
       .buildView(); 


     miniResult = result.getMiniDrawer(); 
     View view = miniResult.build(this); 

Antwort

1

zu verwenden, wie von der normalen Nutzung gibt es immer die „normale“ Schublade ist (über die DrawerLayout), und die MiniDrawer in Ihrem Fall möchten Sie nur die MiniDrawer verwenden und es zu Ihrer View Hierarchie hinzufügen.

Wie Sie bereits richtig herausgefunden haben, wird die MiniDrawer über die normale DrawerBuilder gefüllt, da dies mit allen Methoden zur Interaktion mit den Elementen in der Schublade kommt.

Da Ihr Anwendungsfall speziell ist, gibt es kein "out-of-the-box" Aufblasen des MiniDrawer allein.

So haben Sie die View der MiniDrawer oben. Sie müssen es jetzt nur zu Ihrer Activity hinzufügen.

Ich empfehle, dass Ihr Layout etwas wie folgt aussieht:

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <android.support.v7.widget.Toolbar 
     android:id="@+id/toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="?attr/actionBarSize"/> 
    <LinearLayout 
     android:id="@+id/container" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_below="@id/toolbar"> 
     <RelativeLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"> 
      <!-- Place your content here --> 
     </RelativeLayout> 
    </LinearLayout> 
</RelativeLayout> 

Also in Ihrem Code, den Sie erhalten den "Container"

LinearLayout container = (LinearLayout) findViewById(R.id.container); 
container.addView(view, 0); //view is the view of your MiniDrawer 

einfach Ihren Code zu verbessern und unnötige Sachen entfernen . Sie können

.withToolbar(toolbar) 
.withTranslucentStatusBar(false) 

als diejenigen zu entfernen sind nicht erforderlich, wenn Sie nur die MiniDrawer

+0

Die Breite der Mini-Schublade verwenden ist zu groß, wird es weg, um ihn manuell anpassen? Danke für deinen Kommentar. Ich weiß das wirklich zu schätzen. – MrG

+0

Sie brauchen also weniger als '72dp'? Der 'MiniDrawer' ist optimiert und für' 72dp' definiert. Es ist möglich ihn zu ändern, erfordert aber etwas mehr Arbeit. – mikepenz

+0

Es klingt also, dass es jetzt funktioniert. Wenn Sie also die Antwort akzeptieren und eine neue Frage öffnen, wie Sie die Breite des MiniDrawer ändern können, wird später auch eine detaillierte Antwort für die neue Frage hinzugefügt. Wird auch anderen helfen – mikepenz

0

In der Dokumentation für die Bibliothek der Entwickler erwähnt, dass Sie lock the drawer. Könnten Sie das ausprobieren und sehen, ob es das Öffnen verhindert?

result = new DrawerBuilder()... 
... 
//get the DrawerLayout from the Drawer 
DrawerLayout drawerLayout = result.getDrawerLayout(); 
//do whatever you want with the Drawer. Like locking it. 
drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED); 

versuchen auch die anderen Sperrmodi definiert here wenn LOCK_MODE_CLOSED uns nicht funktioniert und lassen Sie wissen, was passiert!

0

Sie können Ansicht für Ihre Schublade wie auf diese Weise erstellen, versuchen ActionsContentView

<shared.ui.actionscontentview.ActionsContentView 
     android:id="@+id/content" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_above="@id/divider" 
     app:actions_layout="@layout/actions" 
     app:actions_spacing="0dp" 
     app:content_layout="@layout/content" 
     app:shadow_drawable="@drawable/shadow" 
     app:shadow_width="8dip" 
     app:spacing="64dip" 
     app:spacing_type="right_offset" /> 

zu verwenden oder versuchen Partial SlidingPaneLayout