Add (open/close) button to activity for (opening/closing) the navigation drawer

29,925

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); 
        }  
    }
)
Share:
29,925

Related videos on Youtube

Sartheris Stormhammer
Author by

Sartheris Stormhammer

Updated on July 09, 2022

Comments

  • Sartheris Stormhammer
    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 the NavigationDrawer. I need to do it programmatically, not in XML. How can I do that?

  • Sartheris Stormhammer
    Sartheris Stormhammer almost 11 years
    but how do I add the button?
  • Sartheris Stormhammer
    Sartheris Stormhammer almost 11 years
    the button is still nowhere to be seen
  • Vikram
    Vikram almost 11 years
    @SartherisStormhammer Can you post your layout xml file? The one that your use in setContentView()?
  • Pravin
    Pravin almost 11 years
    In 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
    Bill Mote almost 10 years
    Why 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
    Pravin almost 10 years
    usually 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
    PriyankaChauhan about 7 years
    HI want to open drawer from any activity of app.
  • Pravin
    Pravin about 7 years