Add (open/close) button to activity for (opening/closing) the navigation drawer
Solution 1
Create a method in MainActivity
which contains your drawerLayout.
public void open()
{
mDrawerLayout.openDrawer(Gravity.LEFT);
}
and from Your fragment
In oncreateView() method As you want new Button Programmatically add Button in Your Root inflated layout. Your fragment has button
bellow I modified fragment try
public static class PlanetFragment extends Fragment {
public static final String ARG_PLANET_NUMBER = "planet_number";
public PlanetFragment() {
// Empty constructor required for fragment subclasses
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_planet, container, false);
int i = getArguments().getInt(ARG_PLANET_NUMBER);
String planet = getResources().getStringArray(R.array.planets_array)[i];
int imageId = getResources().getIdentifier(planet.toLowerCase(Locale.getDefault()),
"drawable", getActivity().getPackageName());
((ImageView) rootView.findViewById(R.id.image)).setImageResource(imageId);
getActivity().setTitle(planet);
RelativeLayout root=(RelativeLayout)rootView.findViewById(R.id.root);
Button button=new Button(getActivity());
LayoutParams params=new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
button.setLayoutParams(params);
params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
params.addRule(RelativeLayout.ALIGN_PARENT_TOP);
button.setText("openDrawer");
root.addView(button);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
((MainActivity)getActivity()).open();
}
});
return rootView;
}
}
}
You can try this code in your fragment..
Solution 2
Create your Button in onCreate(Bundle)
method:
Button button = new Button(this);
Find your DrawerLayout
:
mDrawerLayout = (DrawerLayout) findViewById(R.id.my_drawer_layout_id);
Set an OnClickListener
on this button:
button.setOnClickListener(new OnClickListener() {
public void onClick(View view) {
mDrawerLayout.openDrawer(Gravity.LEFT);
}
)
This will give you an empty drawer. If you have a View
that you would like to place inside the drawer, replace:
mDrawerLayout.openDrawer(Gravity.LEFT);
with:
mDrawerLayout.openDrawer(myCustomView);
If you want the button to toggle the drawer(close the drawer if its open or, open it if its closed) use the following OnClickListener
:
button.setOnClickListener(new OnClickListener() {
public void onClick(View view) {
if (mDrawerLayout.isDrawerOpen(Gravity.LEFT)) {
mDrawerLayout.closeDrawer(Gravity.LEFT);
} else {
mDrawerLayout.openDrawer(Gravity.LEFT);
}
}
)
If you are using a custom view, use this OnClickListener
:
button.setOnClickListener(new OnClickListener() {
public void onClick(View view) {
if (mDrawerLayout.isDrawerOpen(myCustomView)) {
mDrawerLayout.closeDrawer(myCustomView);
} else {
mDrawerLayout.openDrawer(myCustomView);
}
}
)
Related videos on Youtube
![Sartheris Stormhammer](https://i.stack.imgur.com/q8cI8.jpg?s=256&g=1)
Sartheris Stormhammer
Updated on July 09, 2022Comments
-
Sartheris Stormhammer almost 2 years
I am currently learning about the Navigation Drawer from the android site, and I am using their example http://developer.android.com/training/implementing-navigation/nav-drawer.html
What I want is to add a button in the
MainActivity
which would be able to open theNavigationDrawer
. I need to do it programmatically, not in XML. How can I do that? -
Sartheris Stormhammer almost 11 yearsbut how do I add the button?
-
Sartheris Stormhammer almost 11 yearsthe button is still nowhere to be seen
-
Vikram almost 11 years@SartherisStormhammer Can you post your layout xml file? The one that your use in
setContentView()
? -
Pravin almost 11 yearsIn answer I have not added button in activity but in fragment,So you can access Drawer from any fragment and from any views click event by calling activity open() method.
-
Bill Mote almost 10 yearsWhy Gravity.LEFT? Why not RIGHT or something else? Is that really relevant or do you just need an int? Not questioning you -- hoping for better understanding.
-
Pravin almost 10 yearsusually navigation drawer open from the left side(as by clicking the icon left to the app logo). See the standered Google apps. But it is also possible to open Nav. drawer from right too..(depends upon needs)
-
PriyankaChauhan about 7 yearsHI want to open drawer from any activity of app.
-
Pravin about 7 years@PriyankaChauhan I 'll suggest you to look into same-navigation-drawer-in-different-activities and android-navigationdrawer-multiple-activities-same-menu and navigation-drawer-to-switch-activities-instead-of-fragments