关于标题栏你的选择

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

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

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

<android:id="@+id/toolbar"

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的格式如下


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已经可以正常使用了

大概就是这样


TOOlBar效果图

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

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

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

<android:id="@+id/toolbar"

android:layout_width="match_parent"

android:layout_height="?attr/actionBarSize"

android:background="#0000ff">

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center"

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

</android.support.v7.widget.Toolbar>


标题居中

另外一点,就是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好像大材小用了~

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,012评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,589评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,819评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,652评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,954评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,381评论 1 210
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,687评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,404评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,082评论 1 238
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,355评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,880评论 1 255
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,249评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,864评论 3 232
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,007评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,760评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,394评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,281评论 2 259

推荐阅读更多精彩内容

  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,191评论 0 17
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 170,544评论 25 707
  • 原文地址:http://www.android100.org/html/201606/06/241682.html...
    AFinalStone阅读 866评论 0 1
  • 上级规劝我,她也是这样一步步走过来的,可是我想说的是我并不会和你比较,我真正在心底暗暗较劲的只有自己的同龄人,无论...
    松果云阅读 203评论 0 0
  • “张鹏,你...你居然背着我!”哐!小可不忍直视眼前的一幕,回头用力的甩上门,她强掩住泪水,但她纤细的手指哪能捉住...
    盛哥阅读 193评论 0 0