web-dev-qa-db-fra.com

Ajouter le bouton (ouvrir / fermer) à l'activité pour (ouvrir / fermer) le tiroir de navigation

J'apprends actuellement sur le tiroir de navigation sur le site Android, et j'utilise leur exemple http://developer.Android.com/training/implementing-navigation/nav- tiroir.html

Ce que je veux, c'est ajouter un bouton dans le MainActivity qui pourrait ouvrir le NavigationDrawer. Je dois le faire par programme, pas en XML. Comment puis je faire ça?

17

Créez une méthode dans MainActivity qui contient votre tiroirLayout.

public void open()
{
    mDrawerLayout.openDrawer(Gravity.LEFT);
}


. Votre fragment a un bouton
ci-dessous j'ai essayé de fragment modifié

 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;
    }
    }
 }


Vous pouvez essayer ce code dans votre fragment ..

38
Pravin

Créez votre bouton dans la méthode onCreate(Bundle):

Button button = new Button(this);

Trouvez votre DrawerLayout:

mDrawerLayout = (DrawerLayout) findViewById(R.id.my_drawer_layout_id);

Définissez un OnClickListener sur ce bouton:

button.setOnClickListener(new OnClickListener() {
    public void onClick(View view) {
        mDrawerLayout.openDrawer(Gravity.LEFT);   
    }
)

Cela vous donnera un tiroir vide. Si vous avez un View que vous souhaitez placer à l'intérieur du tiroir, remplacez:

mDrawerLayout.openDrawer(Gravity.LEFT);

avec:

mDrawerLayout.openDrawer(myCustomView);

Si vous voulez que le bouton bascule le tiroir (fermez le tiroir s'il est ouvert ou, ouvrez-le s'il est fermé) utilisez le OnClickListener suivant:

button.setOnClickListener(new OnClickListener() {
    public void onClick(View view) {
        if (mDrawerLayout.isDrawerOpen(Gravity.LEFT)) {
            mDrawerLayout.closeDrawer(Gravity.LEFT);
        } else {
            mDrawerLayout.openDrawer(Gravity.LEFT); 
        }  
    }
)

Si vous utilisez une vue personnalisée, utilisez cette OnClickListener:

button.setOnClickListener(new OnClickListener() {
    public void onClick(View view) {
        if (mDrawerLayout.isDrawerOpen(myCustomView)) {
            mDrawerLayout.closeDrawer(myCustomView);
        } else {
            mDrawerLayout.openDrawer(myCustomView); 
        }  
    }
)
13
Vikram