一. 前言
关于android状态栏,其实之前自己在做开发的时候就是会直接隐藏掉系统自带的actionbar,然后创建一个LinearLayout布局,高度设置为actionSize,然后就直接在这个布局里面摆放控件(往事不堪回首)。直到第一次使用到了ToolBar,沃德玛雅!怎么那么好用,后来就一发不可收拾的爱上了这个Google官方推荐的bar了。
二. ToolBar的基本使用
首先是需要在res/values/styles.xml中设置AppTheme中parent的主题为NoActionBar
主题,接着就会发现我们的xml预览图中所有界面的顶部就都没有了bar。
接着就是在布局文件中来使用ToolBar了:
如果想要改变ToolBar上面显示的文字,则可以到AndroidMainifest.xml中来进行修改:
三. 在ToolBar上面设置返回和menu
1.设置返回
使用Toolbar可以很方便的的设置app左上角的返回/打开滑动窗口的按钮,具体的操作代码如下:
上述代码需要注意一下:在getSupportActionBar()
之前必须要先setSupportActionBar()
,否则图标就不会显示出来,图标的默认样式是一个箭头向右的返回箭头,如果想要改变图片,则可以调用setHomeAsUpIndicator()
方法:
if(actionBar != null) {
actionBar.setDisplayHomeAsUpEnabled(true); //显示图标
actionBar.setHomeAsUpIndicator(R.drawable.menu); //自定义图标
}
如果想要对图标设置点击事件,则可以调用如下代码:
@Override
public boolean onOptionsItemSelected(MenuItem item){
switch (item.getItemId()){
case android.R.id.home: //默认id
finish();
break;
}
return true;
}
2.设置menu
接下来对Toolbar的右上角进行操作,来增加一个menu。首先是在res中新建一个Directory叫做menu,接着在menu文件夹中创建一个Menu resource file创建一个xml文件:
接着就是在主代码中将menu加载进入Toolbar中:
@Override
public boolean onCreateOptionsMenu(Menu menu){
getMenuInflater().inflate(R.menu.toolbar,menu);
return true;
}
最后就是对每一项menu设置点击事件,修改onOptionsItemSelected
方法:
@Override
public boolean onOptionsItemSelected(MenuItem item){
switch (item.getItemId()){
case android.R.id.home:
finish();
break;
case R.id.menu1:
Toast.makeText(this, "menu1", Toast.LENGTH_SHORT).show();
break;
case R.id.menu2:
Toast.makeText(this, "menu2", Toast.LENGTH_SHORT).show();
break;
case R.id.menu3:
Toast.makeText(this, "menu3", Toast.LENGTH_SHORT).show();
break;
}
return true;
}
四. 我只想在右上角设置一个按钮
如果想在Toolbar的右上角设置一个按钮,思路就是创建一个只有一个子项的menu,然后在item里面设置app:showAsAction=“always”
即可: