0

Ich möchte einen NavigationsDrawler zu allen meinen Aktivitäten hinzufügen. Ich bin unzufrieden mit vielen Lösungen, die ich auf Stackoverflow und anderen Foren gefunden habe. Dann habe ich diese MaterialDrawer library gefunden, die es sehr einfach zu machen scheint. Aber ich würde gerne einen eigenen Stil für alle Gegenstände in der Schublade implementieren. Wie kann ich das mit dieser Bibliothek machen?NavigationDrawer in mehreren Aktivitäten und Stil Zeile

Antwort

0

Die MaterialDrawer ist auf Flexibilität ausgelegt. Es benötigt Objekte, die die Schnittstelle IDrawerItem bilden. So können Sie einfach Ihre eigenen Elemente hinzufügen, indem Sie einfach die IDrawerItem Schnittstelle implementieren. Es gibt bereits einige Standard DrawerItems wie die PrimaryDrawerItem, auf die Sie sich verlassen können (erweitern Sie es einfach) oder Sie können mit einem vollständigen benutzerdefinierten Ansatz gehen.

Um die Dinge einfacher zu machen, kommt die MaterialDrawer mit der AbstractDrawerItem, die bereits implementiert Standardverhalten für die meisten Elemente benötigt.

Sie können die benutzerdefinierten DrawerItems, die in der Beispielanwendung here hinzugefügt wurden, auschecken.

Eine komplette kundenspezifische Artikel ist die IconDrawerItem

public class IconDrawerItem extends AbstractDrawerItem<IconDrawerItem, IconDrawerItem.ViewHolder> { 
    protected ImageHolder icon; 
    protected ImageHolder selectedIcon; 

    protected boolean iconTinted = false; 

    protected ColorHolder iconColor; 
    protected ColorHolder selectedIconColor; 
    protected ColorHolder disabledIconColor; 

    //GETTER & SETTER REMOVED TO KEEP THE SNIPPET SMALL 

    @Override 
    public int getType() { 
     return R.id.material_drawer_item_icon_only; 
    } 

    @Override 
    @LayoutRes 
    public int getLayoutRes() { 
     return R.layout.material_drawer_item_icon_only; 
    } 

    @Override 
    public void bindView(ViewHolder viewHolder) { 
     Context ctx = viewHolder.itemView.getContext(); 

     //set the identifier from the drawerItem here. It can be used to run tests 
     viewHolder.itemView.setId(hashCode()); 

     //get the correct color for the icon 
     int iconColor; 
     if (this.isEnabled()) { 
      iconColor = ColorHolder.color(getIconColor(), ctx, R.attr.material_drawer_primary_icon, R.color.material_drawer_primary_icon); 
     } else { 
      iconColor = ColorHolder.color(getDisabledIconColor(), ctx, R.attr.material_drawer_hint_icon, R.color.material_drawer_hint_icon); 
     } 
     int selectedIconColor = ColorHolder.color(getSelectedIconColor(), ctx, R.attr.material_drawer_selected_text, R.color.material_drawer_selected_text); 

     //get the drawables for our icon and set it 
     Drawable icon = ImageHolder.decideIcon(getIcon(), ctx, iconColor, isIconTinted(), 1); 
     Drawable selectedIcon = ImageHolder.decideIcon(getSelectedIcon(), ctx, selectedIconColor, isIconTinted(), 1); 
     ImageHolder.applyMultiIconTo(icon, iconColor, selectedIcon, selectedIconColor, isIconTinted(), viewHolder.icon); 

     //call the onPostBindView method to trigger post bind view actions (like the listener to modify the item if required) 
     onPostBindView(this, viewHolder.itemView); 
    } 

    @Override 
    public ViewHolderFactory getFactory() { 
     return new ItemFactory(); 
    } 

    public static class ItemFactory implements ViewHolderFactory<ViewHolder> { 
     public ViewHolder create(View v) { 
      return new ViewHolder(v); 
     } 
    } 

    protected static class ViewHolder extends RecyclerView.ViewHolder { 
     private View view; 
     protected ImageView icon; 

     private ViewHolder(View view) { 
      super(view); 
      this.view = view; 
      this.icon = (ImageView) view.findViewById(R.id.material_drawer_icon); 
     } 
    } 
} 

Es gibt keine Beschränkungen. Sie müssen nur den Typ als Bezeichner definieren, das Layout, das verwendet wird, und das bindView() implementieren, das aufgerufen wird, um die Daten für alle Ansichten festzulegen.