关于标题栏你的选择

说起Android app的标题栏,有默认的ActionBar,现在应该没什么人用了,也有设置NoTitle之后去自定义Layout布局加入每个页面中,还有这篇文章想说的ToolBar。

ActionBar,google推出ToolBar来取代ActionBar,说明ActionBar还是有其局限,不能很好的跟上google提倡的Material Design。自定义布局这种方式如果实在喜欢,也不是不可,那为什么我喜欢ToolBar,因为这是google推出的,简单东西简单用,就好比下拉刷新,如果没有特别要求,我也是喜欢google提供的那个刷新控件。

说了半天,该说一下ToolBar这个控件。ToolBar是5.0推出的,一般而言我们都会用v7下的包

android:layout_width="match_parent"

android:layout_height="?attr/actionBarSize"

android:background="#0000ff"/>

首先因为新建的项目都是默认有个标题栏的,所以要先去掉标题栏,去掉标题栏就不赘述了,这里我在代码里去除,oncreate方法中,setcontentView 之前加上 requestWindowFeature(Window.FEATURE_NO_TITLE); 

然后在代码里面找到ToolBar控件进行各种设置,不设置的项,不会显示

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);

toolbar.setNavigationIcon(R.drawable.arrow);//设置左边图片

toolbar.setLogo(R.drawable.ic_launcher);//设置app logo

toolbar.setTitle("标题");//设置标题

toolbar.setSubtitle("小标题");//设置小标题

toolbar.inflateMenu(R.menu.menu_main);//设置右侧菜单

这里有个菜单项

res目录下新建一个menu文件夹,存放menu的xml文件

menu的格式如下


关于标题栏你的选择_第1张图片

menu里面设置菜单项,不限个数,可以为该菜单项设置图片,如果没设置图片,显示的就是title的文字,如果设置了图片,显示图片,同时长按图片会弹出title文字,这里有个showAsAction属性,常用的是ifRoom,表示如果有剩余空间,则显示该项。never,表示永远不会显示该项,如果有一个item设置了never,那么ToolBar的最右端会有一个设置选项,点击会弹出设置了never的菜单项,always,表示总是显示该项。如果你设置了很多个always,那会一直向左挤,使左边的控件隐藏。应该没人这样搞吧。。给自己找事不是么。。

ToolBar上的各种控件,相应的也可以设置一些属性,比如设置标题的字体大小,颜色

左侧图片的点击事件,右侧菜单的点击事件

字体的就不多说了,下面是点击事件的设置

//导航按钮点击

toolbar.setNavigationOnClickListener(newView.OnClickListener() {

@Override

public voidonClick(View view) {

//TODO  dosomething

}

});

//菜单点击

toolbar.setOnMenuItemClickListener(newToolbar.OnMenuItemClickListener() {

@Override

public booleanonMenuItemClick(MenuItem item) {

switch(item.getItemId()) {

caseaction_edit:

break;

caseaction_share:

break;

caseaction_setting:

break;

}

Toast.makeText(MainActivity.this,"onClick"+item.getTitle(),Toast.LENGTH_SHORT).show();

return false;

}

});

实际上讲到这里ToolBar已经可以正常使用了

大概就是这样


关于标题栏你的选择_第2张图片
TOOlBar效果图

但是有时候这么一层不变的UI并不能满足千变万化的需求

比如说这个标题需要居中,原生的ToolBar并没有提供接口让开发去设置,标题一定是靠着logo右端的

标题居中,我们可以这样做,因为ToolBar是一个ViewGroup,所以他可以添加子控件,我们在布局的Toolbar里添加一个TextView来取代原先的标题

android:layout_width="match_parent"

android:layout_height="?attr/actionBarSize"

android:background="#0000ff">

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center"

android:text="我是居中的标题"/>



关于标题栏你的选择_第3张图片
标题居中

另外一点,就是ToolBar的重用问题,给一个单独的Layout布局,include到需要标题栏的地方,可以减少很多重复代码

如果像我上面这样使用ToolBar,(有另外一种setSupportActionBar(toolbar);)

相比起来,第二种使用toolbar去替换原先的ActionBar,所以他可以调用onCreateOptionsMenu,onPrepareOptionsMenu,之类的方法,来操作右边的menu,而第一种直接在toolbar里调用方法去inflate一个menu。这里是有一个考虑,就是如果相同的toolbar,右端menu可能展示是不一样的,如果有第二中方法,可以在onPrepareOptionsMenu里做各种判断,让menu展示哪个,而第一种,因为不走这个方法,所以不能这样操作。

其实只要在创建toolbar的时候inflate另外的menu布局就行了,还省了许多逻辑判断

最后呢

在用toolbar的时候,上面的高度设置成?attr/actionBarSize,是默认的标题栏高度,如果你设置成wrap_content也是一样的效果,高度是56dp,这应该是google推荐的一个高度,(并且不推荐开发者修改),如果你设置高度太小,那整个标题栏看起来的效果就会差强人意,该居中的不居中了,该对其的没有对齐。如果你的标题栏需要原生的这种效果,那不建议修改高度,如果你是只有一个居中标题的那种,toolbar里加一个TextView设置居中,高度就随便你设置了~不过如此简单的布局toolbar好像大材小用了~

第一次发文,有什么错误的欢迎指出~

你可能感兴趣的:(关于标题栏你的选择)