-
Notifications
You must be signed in to change notification settings - Fork 433
Home
this is a simple wiki that show you all library functionality
It determines the type of the drawer.
At this time, this library implements these types:
- Accounts
- Image
- No Header
- Custom
Like the mosts google like apps, it shows the account information.
This is the default drawer type, visit the Account section for other information.
It shows a simple image in 16:9
To enable it, add this line to your custom Theme in your styles.xml
:
<item name="drawerType">@integer/DRAWERTYPE_IMAGE</item>
Then you can set your image in your Activity using this code in your init()
method:
this.setDrawerHeaderImage(this.getResources().getDrawable(YOUR_DRAWABLE));
Simple removes the header from the drawer.
To enable it, add this line to your custom Theme in your styles.xml
:
<item name="drawerType">@integer/DRAWERTYPE_NO_HEADER</item>
replace the 16:9 header space in your drawer with a custom view.
To enable it, add this line to your custom Theme in your styles.xml
:
<item name="drawerType">@integer/DRAWERTYPE_CUSTOM</item>
Then you can set your view in your Activity using this code in your init()
method:
View view = LayoutInflater.from(this).inflate(R.layout.custom_drawer,null);
setDrawerHeaderCustom(view);
A section is a simple element of your navigation drawer list. There are two type of section at this time:
- Text Section
- Text and Icon Section
Every section could have a notifications number.
There are two different lists where you can add your section:
- Top list (default list)
- Bottom List
It is a list used exclusively for About, Settings or other things like this.
NOTE If you add to the bottom list a section that doesn't mean that your section is pinned to the bottom.
See Material design guidelines > Settings and support for a complete explanation
// only text section, it opens an activity
public MaterialSection newSection(String title,Intent target)
// only text section, it opens a fragment
public MaterialSection newSection(String title,Fragment target)
// only text section, it calls target.onClick() method when section is clicked
public MaterialSection newSection(String title,MaterialSectionListener target)
// icon bitmap and text section, it opens an activity
public MaterialSection newSection(String title, Bitmap icon,Intent target)
// icon bitmap and text section, it opens a fragment
public MaterialSection newSection(String title, Bitmap icon,Fragment target)
// icon bitmap and text section, it calls target.onClick() method when section is clicked
public MaterialSection newSection(String title, Bitmap icon,MaterialSectionListener target)
// icon int resource and text section, it opens an activity
public MaterialSection newSection(String title, int icon,Intent target)
// icon int resource and text section, it opens a fragment
public MaterialSection newSection(String title, int icon,Fragment target)
// icon int resource and text section, it calls target.onClick() method when section is clicked
public MaterialSection newSection(String title, int icon,MaterialSectionListener target)
// icon drawable and text section, it opens an activity
public MaterialSection newSection(String title, Drawable icon, Intent target)
// icon drawable and text section, it opens a fragment
public MaterialSection newSection(String title, Drawable icon, Fragment target)
// icon drawable and text section, it calls target.onClick() method when section is clicked
public MaterialSection newSection(String title, Drawable icon, MaterialSectionListener target)
// add section to the top list
public void addSection(MaterialSection section)
// add section to the bottom list
public void addBottomSection(MaterialSection section)
NOTE that the first section you added is opened when the activity starts, so it must have a Fragment as target.
When a section that has a color is opened, the toolbar background color is setted to this value, and the status bar color is setted with the value of colorDark.
If a section with color is clicked the text color (into the drawer) is colored with his color. If the section has an icon, the icon have the color of the section.
mySection.setSectionColor(color,colorDark);
int number = 4;
mySection.setNotifications(number);
int notifications = mySection.getNotifications();
@Override
public void init(Bundle savedInstanceState) {
this.addSubheader("Subheader title");
}
A separator (or divisor) is a simple grey line used for diversify group of sections.
@Override
public void init(Bundle savedInstanceState) {
this.addDivisor();
}
A collection of user data.
This library not implements an Android Account, it allows only to set user data in your navigation drawer.
NB At this time you can add accounts until a max number of 3 accounts.
public MaterialAccount(String title, String subTitle, Drawable photo,Bitmap background)
public MaterialAccount(String title, String subTitle, Drawable photo,Drawable background)
public MaterialAccount(String title, String subTitle, Bitmap photo, Drawable background)
public MaterialAccount(String title, String subTitle, Bitmap photo, Bitmap background)
MaterialAccount account;
this.addAccount(account);
implements MaterialAccountListener
in your MaterialNavigationDrawer
and then connect your listener to the navigation drawer
// set listener
this.setAccountListener(this);
When the Activity starts, the drawer will be open automatically for let the users to know that there is a navigation drawer. It seems like pretty obvious to us, but there are some users that must be taught to do that (unfortunatelly).
if you want to disable it, add this code to your init()
method:
this.disableLearningPattern();
There are a lot of methods for use the back button. Actually this library supports these patterns:
- Back Anywhere (default)
(if user click on back button, the activity will close) - Back to first
(if user click on back button, the content change to the first section fragment) - Custom backpattern
(see below)
for setting the pattern add in your init this code:
setBackPattern(MaterialNavigationDrawer.BACKPATTERN_BACK_TO_FIRST);
When you use this backpattern you should override this method in your MaterialNavigationDrawer
Activity:
@Override
protected MaterialSection backToSection(MaterialSection currentSection) {
// example of use:
if(currentSection == night) {
return last;
}
if(currentSection == last) {
return section1;
}
return super.backToSection(currentSection);
}
if you have some pattern to suggest please comment on this issue, thanks.
multi pane support makes the drawer always open on the left, but only with tablet in landscape mode.
for activate it, add this method to your init()
addMultiPaneSupport();
From your Activity:
// get toolbar
this.getToolbar();
// get Action Bar
this.getSupportActionBar();
From your Fragment:
// get toolbar
((MaterialNavigationDrawer)this.getActivity()).getToolbar();
// get action bar
this.getActivity().getSupportActionBar();
From your Activity:
this.getCurrentSection();
From your Fragment:
((MaterialNavigationDrawer)this.getActivity()).getCurrentSection();
When your image is loaded from the web, in your async Thread change your account information like this:
// set photo
account.setPhoto(photo);
// set background
account.setBackground(background);
And then call the notifyAccountDataChanged
method on ui thread:
runOnUiThread(new Runnable() {
@Override
public void run() {
notifyAccountDataChanged();
}
});
From your Activity:
this.getCurrentAccount();
From your Fragment:
((MaterialNavigationDrawer)this.getActivity()).getCurrentAccount();
From your Activity:
int position;
this.getAccountAtCurrentPosition(position);
From your Fragment:
((MaterialNavigationDrawer)this.getActivity()).getAccountAtCurrentPosition(position);
for default, it is disabled.
If you want to re-enable it add this to your init()
method:
allowArrowAnimation();
Well, if you want to follow exactly the material design guidelines you have not to do it. If you want to mock this functionality, on your extended Fragment class insert this code:
@Override
public void onResume() {
super.onResume();
((MaterialNavigationDrawer)this.getActivity()).changeToolbarColor(primaryColor,primaryColorDark);
}
Ripple support activate the ripple when a section is clicked/tapped.
As default is enabled on Lollipop devices and on Kitkat devices if Theme use a TranslucentKitKatStatusBar
Theme
To enable it on all 14+ devices, add this line to your custom theme:
<item name="rippleBackport">true</item>
You could set a Text as your notification using:
section.setNotificationsText("MyValue");