Toolbar其实是一个ActionBar的变体,大大扩展了Actionbar。我们可以像对待一个独立控件一样去使用ToolBar,可以将它放到屏幕的任何位置,不必拘泥于顶部,还可以将它改变高度或者是在ToolBar上使用动画。从最新的SDK看,很多actionbar的方法已经变成了废弃的了,所以我们可以断定未来就是Toolbar将会完全取代ActionBar!
1. 布局
可以直接在xml布局文件中设置
2. 与ActionBar 进行关联
Toolbar toolbar = (Toolbar) findViewById(R.id.common_toolbar);
setSupportActionBar(toolbar);
两个前提:
- 主题中必须设置没有Actionbar( <item name="windowActionBar">false</item> 或者继承Theme.AppCompat.Light.NoActionBar主题 ),否则就会出现报里两个actionbar的错误
- 当前Activity继承AppCompatActivity
3. 与ActionBar 不进行关联
不用去setSupportActionBar,也不用在activity中onCreateOptionsMenu,
- 直接设置菜单及监听方法
- 注意: 主题样式要继承自:Theme.AppCompat,否则会有显示问题
toolbar.inflateMenu(R.menu.aaa_menu_main);
//setSupportActionBar(toolbar);
toolbar.setNavigationIcon(getResources().getDrawable(R.drawable.ic_launcher));//设置导航按钮
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem menuItem) {
int id = menuItem.getItemId();
if (id == R.id.action_add_new_item) {
return true;
} else {
return false;
}
}
});
4. Toolbar 详细配置方法
toolbar.setTitle("ToolBar Title");//设置标题
toolbar.setSubtitle("This is subtitle");//设置子标题
toolbar.setTitleTextColor(Color.parseColor("#ff0000"));//设置标题颜色
toolbar.setLogo(R.drawable.ic_launcher);//设置logo图片
toolbar.setNavigationIcon(drawable);//设置导航按钮
5. 添加自定义布局
可以往toolbar中添加一个或者任意多个自定义视图。它们将会在toolbar中出现。如果子视图的的布局属性是CENTER_HORIZONTAL(横向居中),那么这个视图会将在toolbar中其他元素 绘制好后 尽可能的在剩下的空间中居中显示。
Toolbar.LayoutParams 这个属性是toolbar的特有属性,用来添加子视图的
TextView subView = new TextView(this);
subView.setText("subTextView");
//设定布局的各种参数
Toolbar.LayoutParams params = new Toolbar.LayoutParams(
Toolbar.LayoutParams.WRAP_CONTENT,
Toolbar.LayoutParams.WRAP_CONTENT,
Gravity.CENTER);
params.setMargins(3, 3, 3, 4);//设置外边界
subView.setLayoutParams(params);
toolbar.addView(subView);
6. 监听方法
- OptionsMenu监听
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
Toast.makeText(getApplicationContext(), "setting", 0).show();
return true;
}
return super.onOptionsItemSelected(item);
}
- ToolBar中设置监听MenuItem的方法
如果你通过toolbar添加了监听器,那么在onOptionsItemSelected()中就监听不到事件了,所以二选一吧。
toolbar.setOnMenuItemClickListener(new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
// TODO 自动生成的方法存根
System.out.println("click + "+item.getItemId());
return false;
}
});
- 在ToolBar中设置NavigationIcon的监听器
navigationIcon不能通过toolbar的setOnMenuItemListener()监听,可以在toolbar的setNavigationOnClickListener()中监听,也能在Activity的onOptionsItemSelected()中监听到,两种监听方式只能选择其一。
toolbar.setNavigationOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO 自动生成的方法存根
System.out.println("click Navigation ");
}
});
网友评论