3.关联抽屉与标题栏
在继承自AppCompatActivity的Activity中,将标题栏设置显示为如下方式:
Toolbar toolbar=(Toolbar)findViewById(R.id.toolbar); toolbar.setTitle("我是大头"); setSupportActionBar(toolbar);
那么将抽屉与标题栏关联要用到ActionBarDrawerToggle。其构造方法有五个参数,按顺序依次如下:
㈠上下文
㈡DrawerLayout
㈢toolbar
㈣打开标识
㈤关闭标识
四与五不显示,仅做标识用。关联抽屉与标题栏代码如下:
DrawerLayout drawerLayout=(DrawerLayout)findViewById(R.id.drawerlayout); ActionBarDrawerToggle mDrawerToggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.drawer_open, R.string.drawer_close); mDrawerToggle.syncState();//初始化状态 drawerLayout.setDrawerListener(mDrawerToggle);
使用setDrawerListener方式设置监听开关的打开与关闭。这样就实现了当按下菜单栏左侧按钮的时候,抽屉会打开。
4.设置NavigationView菜单选项的监听事件
该View给我们提供了菜单的监听回调方法:
setNavigationItemSelectedListener其需要实现的接口如下:
public interface OnNavigationItemSelectedListener { boolean onNavigationItemSelected(MenuItem var1); }
接口方法就一个,且参数就是菜单。下面我将实现其监听:
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected(MenuItem menuItem) { switch (menuItem.getItemId()){//获取菜单itemID case R.id.lyj_menu_datou: getSupportFragmentManager().beginTransaction().replace(R.id.linearlayout,new DrawerFragment("我是大头")).commit(); toolbar.setTitle("我是大头"); break; case R.id.lyj_menu_xiaotou: getSupportFragmentManager().beginTransaction().replace(R.id.linearlayout,new DrawerFragment("我是小头")).commit(); toolbar.setTitle("我是小头"); break; case R.id.lyj_menu_chilun: getSupportFragmentManager().beginTransaction().replace(R.id.linearlayout,new DrawerFragment("我是齿轮")).commit(); toolbar.setTitle("我是齿轮"); break; default: break; } menuItem.setChecked(true);//设置菜单选中 drawerLayout.closeDrawers();//当选中菜单后,就要关闭抽屉 return false; } });
根据菜单ID,设置fragment界面。最后效果图,就是博文开始的图片。
5.导入支持库
昨天讲解忘记了,需要配置如下信息,方能使用控件:
dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:23.0.1' compile 'com.android.support:design:23.0.1' compile 'com.android.support:recyclerview-v7:23.0.1' compile 'com.android.support:cardview-v7:23.0.1' }
红色标记为导入的代码。