Tüm Etkinliklerim'e bir NavigationDrawer eklemek istiyorum. Stackoverflow ve diğer forumlarda bulduğum birçok çözümden memnun değilim. Sonra bu çok kolay gibi görünüyor bu MaterialDrawer library bulundu. Ancak, Çekmecedeki tüm öğeler için kendi stilini uygulamak istediğimi biliyorum. Bunu bu kütüphaneyle nasıl yapabilirim?Birden çok Etkinlikte ve Tarz Çizgisinde NavigationDrawer
cevap
MaterialDrawer
esneklik göz önünde bulundurularak tasarlanmıştır. IDrawerItem
arabirimini kaldıran nesneleri alır. Böylece sadece IDrawerItem
arayüzünü kullanarak kendi öğelerinizi kolayca ekleyebilirsiniz. DrawerItems
gibi zaten var olan bazı varsayılan PrimaryDrawerItem
gibi (sadece genişletebilirsiniz) veya tamamen özel bir yaklaşımla devam edebilirsiniz.
İşleri kolaylaştırmak için, MaterialDrawer
, çoğu öğe için gereken varsayılan davranışları zaten uygulayan AbstractDrawerItem
ile birlikte gelir.
Örnek uygulama here'da eklenen özel DrawerItems'e göz atabilirsiniz.
Tam bir özel öğe hiçbir sınırlama yoktur 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);
}
}
}
olduğunu. Türü, tanımlayıcı, kullanılan düzeni tanımlamak ve verileri tüm görünümlere ayarlamak için çağrılacak olan bindView()
'u uygulamak zorundasınız.