Android 如何在主片段中单击按钮打开导航抽屉?

Android 如何在主片段中单击按钮打开导航抽屉?,android,fragment,navigation-drawer,Android,Fragment,Navigation Drawer,我制作了一个应用程序,其中有一个活动,它使用导航抽屉打开许多不同的片段。我有actionbar抽屉切换,但它不是很明显。 如果我在我的主片段(应用程序首次启动时出现的片段)的onCreateView中放置一个按钮,我如何让它打开由我的活动控制的导航抽屉 这似乎奏效了。答案比我想象的要简单得多 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedI

我制作了一个应用程序,其中有一个活动,它使用导航抽屉打开许多不同的片段。我有actionbar抽屉切换,但它不是很明显。 如果我在我的主片段(应用程序首次启动时出现的片段)的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);          

    }

谢谢您的回答。

如果您需要打开幻灯片:

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

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

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

您应该使用 下面的代码根据抽屉的当前状态(打开或关闭)自动关闭或打开导航抽屉


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

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

}

在特定事件中,使用以下行打开和关闭抽屉:

打开抽屉的代码段: 关闭抽屉的代码段: → <代码>打开抽屉(重力导航视图将显示)

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

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

我认为这是最好的答案。

你可以考虑<代码> MpReuleDealth.IsStudioOpOpen[DutabVIEW](代码)>而不是FLAGI。在此情况下,布局将移动到一侧。我该怎么办?在xml中,最后一个(最底部)声明的视图默认具有最高的z索引(顶部),如果解决了问题,则应接受上述答案。一切正常,但是
setDrawerListener
已被弃用,必须使用
addDrawerListener
这会导致汉堡菜单消失,并替换为向上箭头。是否打开左侧抽屉并关闭右侧抽屉?否则,为什么要使用gravity.start在第一行,gravity.end在第二行?还有,为什么同时使用重力compat和重力?只是想知道我是否遗漏了什么,因为在文档中重力是用来识别抽屉的。@A.Harkous我不是打开左边的抽屉,关闭右边的抽屉。我使用Gravity.START和Gravity.END的目的是,当单击同一按钮时,如果抽屉没有打开,它将被打开,否则如果抽屉已经打开,它将被关闭。这是为了根据导航抽屉的当前状态,使用相同的按钮来关闭或打开导航抽屉。是的,使用GravityCompat是一个打字错误。修好了
    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();
    }
}
drawerLayout.openDrawer(Gravity.START);
drawerLayout.closeDrawer(Gravity.LEFT);
Gravity.LEFT
Gravity.RIGHT
Gravity.START
Gravity.END