我制作了一个带有一个活动的应用程序,该活动使用导航抽屉打开许多不同的片段。我有动作栏drawertoggle,但它不是很明显。 如果我在主片段中的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);
}
感谢您的回答。
答案 0 :(得分:55)
如果您需要打开幻灯片:
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
这项工作对我来说,我希望能解决你的问题。
答案 1 :(得分:6)
如果您使用Android中的默认导航活动,则必须这样做 在按钮--->
的点击监听器中添加此代码mDrawerLayout.openDrawer(Gravity.START);
关闭你不必做任何事情。
答案 2 :(得分:3)
我有一个使用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(GravityCompat.START)) navDrawer.openDrawer(Gravity.START);
else navDrawer.closeDrawer(Gravity.END);
}
});
答案 3 :(得分:0)
使用此处描述的标准回调模型:
http://developer.android.com/training/basics/fragments/communicating.html
当您按下按钮时,启动对活动的回调并让它打开您的抽屉。
答案 4 :(得分:0)
要将工具栏用作应用程序栏,请首先确保您的活动从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();
}
}
}