27

我制作了一个带有一个活动的应用程序,该活动使用导航抽屉打开许多不同的片段。我有操作栏抽屉切换,但它不是很明显。如果我在我的主片段(我的应用程序首次启动时出现的片段)的 onCreateView 中放置一个按钮,我怎样才能让它打开由我的活动控制的导航抽屉?


这似乎有效。答案比我想象的要简单得多。

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View fragView = inflater.inflate(R.layout.mainmenu, container, false);
    button1 = (Button) fragView.findViewById(R.id.button1);         
    mDrawerLayout = (DrawerLayout)getActivity().findViewById(R.id.drawer_layout);
    mDrawerList = (ListView)getActivity().findViewById(R.id.left_drawer);
    button1.setOnClickListener(this);
    return fragView;
}


@Override
public void onClick(View v) {       

        mDrawerLayout.openDrawer(mDrawerList);          

    }

谢谢您的回答。

4

5 回答 5

75

如果您需要打开幻灯片:

mDrawerLayout.openDrawer(Gravity.LEFT); //Edit Gravity.START need API 14

如果您需要关闭幻灯片

mDrawerLayout.closeDrawer(Gravity.LEFT); //Edit Gravity.START need API 14

例子

我的 mDrawerLayout 在这里实例化:

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

我的幻灯片状态:

mSlideState=false;

如果您需要知道幻灯片菜单状态(关闭、打开)。使用此代码:

mDrawerLayout.setDrawerListener(new ActionBarDrawerToggle(this, 
    mDrawerLayout, 
    R.drawable.ic_menu_slide,
    0,
    0){
@Override
public void onDrawerClosed(View drawerView) {                       
    super.onDrawerClosed(drawerView);
    mSlideState=false;//is Closed
}
@Override
public void onDrawerOpened(View drawerView) {                       
    super.onDrawerOpened(drawerView);
    mSlideState=true;//is Opened
}});

最后。你可以像这样使用你的点击事件:

public void clickEventSlide(){
if(mSlideState){                
    mDrawerLayout.closeDrawer(Gravity.END);
}else{              
    mDrawerLayout.openDrawer(Gravity.END);
}}

就我而言,我的幻灯片菜单位于右侧(Gravity.END),但如果您需要它在左侧,请尝试使用Gravity.START

于 2015-01-30T17:23:04.357 回答
19

你应该使用isDrawerOpen()

下面的这段代码会根据抽屉的当前状态(打开或关闭)自动关闭或打开导航抽屉

Button hamMenu = findViewById(R.id.ham_menu);

hamMenu.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        DrawerLayout navDrawer = findViewById(R.id.drawer_layout);
        // If the navigation drawer is not open then open it, if its already open then close it.
        if(!navDrawer.isDrawerOpen(Gravity.START)) navDrawer.openDrawer(Gravity.START);
        else navDrawer.closeDrawer(Gravity.END);
    }
});
于 2018-10-28T12:36:31.203 回答
4

如果您在 android 中使用默认导航活动,您只需将此代码添加到按钮的单击侦听器中--->

mDrawerLayout.openDrawer(Gravity.START);

对于关闭,您不必做任何事情。

于 2018-03-15T15:36:23.970 回答
4

使用这些行在某个事件上打开和关闭抽屉:

打开抽屉的代码片段:

drawerLayout.openDrawer(Gravity.START);

关闭抽屉的代码片段:

drawerLayout.closeDrawer(Gravity.LEFT);

openDrawer(gravity_of_navigation_view_to_be_shown)

在 openDrawer("gravity") 的 "gravity" 部分中,您必须输入导航视图的重力,如上所示:

Gravity.LEFT
Gravity.RIGHT
Gravity.START
Gravity.END

我认为这是最好的答案。

于 2019-09-22T18:07:19.020 回答
3

要将工具栏应用为应用栏,首先确保您的活动从 AppCompatActivity 扩展。然后调用 setSupportActionBar() 并从布局中传递 Toolbar 对象:

    toolbar=(Toolbar) findViewById(R.id.toolbar_main);
    setSupportActionBar(toolbar);
    ActionBar actionbar = getSupportActionBar();
    actionbar.setDisplayHomeAsUpEnabled(true);
    actionbar.setHomeAsUpIndicator(R.drawable.ic_menu_black_24dp);

    drawerLayout=(DrawerLayout)findViewById(R.id.drawer_layout);
    ActionBarDrawerToggle actionBarDrawerToggle=new ActionBarDrawerToggle(this,drawerLayout,R.string.navigation_drawer_open,
            R.string.navigation_drawer_close);
    drawerLayout.addDrawerListener(actionBarDrawerToggle);
    actionBarDrawerToggle.syncState();

}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            drawerLayout.openDrawer(GravityCompat.START);
            return true;
    }
    return super.onOptionsItemSelected(item);
}

@Override
public void onBackPressed() {
    if (drawerLayout.isDrawerOpen(GravityCompat.START)){
        drawerLayout.closeDrawer(GravityCompat.START);
    }
    else{
        super.onBackPressed();
    }
}

}

于 2019-04-11T12:05:53.313 回答