Добавить кнопку (открыть/закрыть) в действие для (открытия/закрытия) навигационного ящика

В настоящее время я изучаю Navigation Drawer с сайта Android и использую их пример http://developer.android.com/training/implementing-navigation/nav-drawer.html

Я хочу добавить кнопку в MainActivity, которая сможет открывать NavigationDrawer. Мне нужно сделать это программно, а не в XML. Как я могу это сделать?


person Sartheris Stormhammer    schedule 25.07.2013    source источник


Ответы (2)


Создайте метод в MainActivity, который содержит ваш drawerLayout.

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


и из вашего фрагмента В методе oncreateView() Как вы хотите новую кнопку Программно добавить кнопку в свой корневой раздутый макет. В вашем фрагменте есть кнопка
ниже. Я изменил фрагмент, попробуйте

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


Вы можете попробовать этот код в своем фрагменте.

person Pravin    schedule 25.07.2013
comment
а как добавить кнопку? - person Sartheris Stormhammer; 25.07.2013
comment
В ответ я добавил кнопку не в действие, а во фрагмент, поэтому вы можете получить доступ к ящику из любого фрагмента и из любого события щелчка представления, вызвав метод действия open (). - person Pravin; 25.07.2013
comment
Почему Gravity.LEFT? Почему не ПРАВО или что-то еще? Это действительно актуально или вам просто нужен int? Не спрашивая вас - надеясь на лучшее понимание. - person Bill Mote; 09.09.2014
comment
обычно навигационный ящик открывается с левой стороны (например, щелкнув значок слева от логотипа приложения). См. стандартные приложения Google. Но также можно открыть Nav. ящик справа тоже..(зависит от потребностей) - person Pravin; 10.09.2014
comment
Я хочу открыть ящик из любого действия приложения. - person PriyankaChauhan; 12.06.2017

Создайте свою кнопку в методе onCreate(Bundle):

Button button = new Button(this);

Найдите свой DrawerLayout:

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

Установите OnClickListener на эту кнопку:

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

Это даст вам пустой ящик. Если у вас есть View, который вы хотите поместить в ящик, замените:

mDrawerLayout.openDrawer(Gravity.LEFT);

с участием:

mDrawerLayout.openDrawer(myCustomView);

Если вы хотите, чтобы кнопка переключала ящик (закройте ящик, если он открыт, или откройте его, если он закрыт), используйте следующие OnClickListener:

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

Если вы используете настраиваемый вид, используйте этот OnClickListener:

button.setOnClickListener(new OnClickListener() {
    public void onClick(View view) {
        if (mDrawerLayout.isDrawerOpen(myCustomView)) {
            mDrawerLayout.closeDrawer(myCustomView);
        } else {
            mDrawerLayout.openDrawer(myCustomView); 
        }  
    }
)
person Vikram    schedule 25.07.2013
comment
кнопки по-прежнему не видно - person Sartheris Stormhammer; 25.07.2013
comment
@SartherisStormhammer Можете ли вы опубликовать свой XML-файл макета? Тот, который вы используете в setContentView()? - person Vikram; 25.07.2013