ToolBar作为新特性替代ActionBar好处自然不用多说,但是ToolBar跟actionbar上有几个小细节特别
容易混淆,所以今天抽时间说下这个问题。
1.如果你的activity是继承自ActionBarActivity的话,又想使用Toolbar作为导航条的话,一般你在代码中会这样配置
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
然后重写onOptionsItemSelected()方法,通过item的getitemId()得到左上角返回箭头的id号,然后做处理
@Override
public boolean onOptionsItemSelected(MenuItem item) {
//监听左上角的返回箭头
if(item.getItemId()==android.R.id.home){
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
((TextView)findViewById(R.id.toolbar_title)).setText("心语互享"); //给Toolbar设置标题
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
// android.app.ActionBar actionBar =getActionBar();
toolbar.setNavigationIcon(R.drawable.abc_ic_ab_back_mtrl_am_alpha); //此处箭头为系统的图标资源
//设置左上角导航键的点击监听事件
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
在此左上角的点击监听事件是直接监听的导航图标的点击监听事件,因此不用复写onOptionsItemSelected()方法了,但是两种方式达到的效果是一样的,具体
使用哪种方式要根据你的activity集成的父activity来决定,
另外,如果在toolbar上设置溢出菜单的话(右上角的三个小圆点),只能是继承activity来实现,如果集成actionbaractivity的话,在代码里设置会不显示
(在代码中测试没显示,因此下了这个结论,如果不对,欢迎指正)
继承activity,然后用如下代码实现toolbar上的溢出菜单
toolbar.inflateMenu(R.menu.heart_share_nemu); //设置溢出菜单
toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId())
{
case R.id.action_settings :
Toast.makeText(HeartShare.this, "请先完善个人资料", Toast.LENGTH_SHORT).show();
break;
}
return false;
}
});