Toobar一般用在实现一个APP的很多页面的标题的时候会用到,实现的方法也有很多种。
注意:Toolbar需要在工程中引入appcompat-v7的兼容包,需要使用android.support.v7.widget.Toolbar进行开发。
一.单纯的在一个Activity中添加一个Toolbar,就是用这一次,可以通过以下步骤。
1.在Activity的xml布局文件中添加如下代码:
android:id="@+id/toolbarbar"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:minHeight="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:navigationIcon="?attr/homeAsUpIndicator"/>
用于引入ToolBar后两句分别用于设置背景以及返回按钮。
2.在Java文件中加入如下代码:
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbarbar); setSupportActionBar(toolbar);
用于对Toolbar的声明,并且同时代替Actionbar的使用。
3.在Manifast.xml文件中加入如下代码:
android:name=".ContentActivity"
android:theme="@style/AppTheme.NoActionBar">
这样就可以基本运行了。
提示:如果只是希望单纯的显示Toolbar的话,可以实现上面步骤。如果还需要添加其他的控件的话,最好是单独写一个Toolbar,然后引入(include),这样比较方便。比如:
android:id="@+id/toolbar"
layout="@layout/back_actionbar" />
back_actionbar就是上面第一条的xml文件内容。
当然,单纯的添加一个Toolbar是不够的:还得进行更多功能的添加。
可以将Toobar做成如图所示样子。接下来我们一一实现。
从左到右依次是 up button的图标,主标题和副标题,以及标题栏按钮(用于点击,编辑等功能)。代码如下:
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); toolbar.setTitle("MyApp");//设置主标题名称 toolbar.setSubtitle("电影");//设置副标题名称 setSupportActionBar(toolbar); toolbar.setNavigationIcon(R.drawable.back);//设置up button的按钮其中toolbar.setNavigatonIcon(R.drawable.back);必须加在setSupportActionBar();之后才会有效。否则会出现返回按钮,而不是你设置的图片。如果再加入
toolbar.setLogo(R.drawable.ic_launcher);
这句代码,用于设置这个APP的图标,加上之后会在图中的返回按钮跟主副标题之间出现这个图片,这里我没有加,有兴趣的可以试一试。
接下来实现右边的三个按钮,这里需要用到menu菜单,首先,在menu目录下建立一个menu_main.xml文件(名字可以自己起),然后xml布局如下:
其中,每一个item是一个如图右边的按钮,这里设置了三个,可以根据需要进行设置。来说说其中的属性。两个属性需要说一下,orderInCategory设置的是优先级,值越大,优先级越小。showAsAction用于设置这个图标是否显示在Toolbar上,有四个值。always:这个值会使菜单项一直显示在Toolbar上。ifRoom:如果有足够的空间,这个值会使菜单项显示在Toolbar上。never:这个值使菜单项永远都不出现在Toolbar上。withText:这个值使菜单项和它的图标,菜单文本一起显示。而如果都想显示,但是Toolbar上空间不足时,这时候优先级就用于判断究竟谁应该显示在Toolbar上,优先级高的显示,优先级低的就在overflow中隐藏起来。
然后需要在onCreateOptionsMenu()方法中将这个菜单视图显示出来:
public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true; }
然后,我么需要给这些按钮添加点击事件,在OnCreate()中的setSupportActionBar()之后进行设置下面代码:
toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { String msg = ""; switch (item.getItemId()) { case R.id.home_live: msg = "您已经点播!"; break; case R.id.btn_grade: msg = "您已经编辑!"; break; case R.id.btn_like: msg = "您已经收藏!"; break; } Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show(); return true; } });用到了setOnMenuItemClickListener()方法,进而根据按钮不同的id进行不同的操作。
注意:setOnMenuItemClickListener()方法也需要添加到setSupportActionBar();之后才会有效。
最后,经过toolbar.setNavigatonIcon(R.drawable.back);设置的up button也可以进行相应的点击事件操作。
如果希望返回按钮能够出现点击返回上一层的功能,则需要在onOptionsItemSelected函数中添加如下代码:
如果不需要返回上一层的按钮,则不需要下面这一步。
public boolean onOptionsItemSelected(MenuItem item) { if(item.getItemId()==android.R.id.home){ finish(); } return super.onOptionsItemSelected(item); }
up button的id为android.R.id.home,可以在判断id之后加入相应的代码进行跳转等功能。我在这里加finish(),用于退出返回上一页。
二.如果想写一个Toolbar作为每个Activity页面的标题,其余的页面都可以复用这一个作为自己的标题的话,可以通过以下步骤实现:
1.新建一个xml文件,加入如下代码:
xml version="1.0" encoding="utf-8"?>在这个页面中,只放入一个TextView实现这个标题,当然同时也可以加入返回按钮之类的,这些都可以自己添加。然后在需要标题的Activity的xml的布局中引入这个布局就好。xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="50dp" android:background="@color/lightcoral"> android:id="@+id/toolbar_title" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:maxLines="1" android:textColor="@android:color/black" android:textSize="16sp" tools:text="标题"/>
android:id="@+id/toolbar"
layout="@layout/title_main" />
同时,在Manifest.xml文件中将这个Activity的theme属性修改成没有Actionbar的
android:theme="@style/AppTheme.NoActionBar"然后,就可以通过这个TextView的id在代码中修改标题的内容,颜色等属性,可在onCreate()中加入。
if(title!=null){ title.setText("心动应用"); title.setTextColor(this.getResources().getColor(R.color.white));这样,很多界面就都可以使用这个标题布局了。