什么是ToolBar?
Android 3.0 Android 推了 ActionBar 这个控件,而到了2013 年 Google 开始大力地推动所谓的 android style,想要逐渐改善过去 android 纷乱的界面设计,希望让终端使用者尽可能在 android 手机有个一致的操作体验。ActionBar 过去最多人使用的两大套件就是 ActionBarSherlock 以及官方提供在 support library v 7 里的 AppCompat。
ToolBar的基本套用:
个性化 Color Palette:
我们可以根据我们的app的风格,去定制Color Palette(调色板),重点有以下几个属性:
colorPrimary 对应ActionBar的颜色。
colorPrimaryDark对应状态栏的颜色
colorAccent 对应EditText编辑时、RadioButton选中、CheckBox等选中时的颜色。
对于5.0以下的设备,目前colorPrimaryDark无法去个性化状态栏的颜色;底部的navagationBar可能也不一样,更别说设置颜色了。
我们可以用一张图来了解一下toolbar:
ToolBar的使用:
众所周知,在使用ActionBar的时候,一堆的问题:这个文字能不能定制,位置能不能改变,图标的间距怎么控制神马的,由此暴露出了ActionBar设计的不灵活。为此官方提供了ToolBar,并且提供了supprot library用于向下兼容。Toolbar之所以灵活,是因为它其实就是一个ViewGroup,我们在使用的时候和普通的组件一样,在布局文件中声明。
使用ToolBar的基本步骤:
1.隐藏原本的ActionBar,通过修改我们的基础主题为:NoActionbar
(可以在清单文件下改变某个Activity的主题,也可以改变应用的主题,应用主题改application节点下的内容)
2.在布局文件里声明ToolBar
3.代码中初始化ToolBar
4.对ToolBar做个性化设置
5.设置ToolBar的菜单点击事件,在res文件下创建Menu文件
6.重写onCreateOptionsMenu方法
通过一个例子:我们来了解一下toolbar
老规矩,先来一张效果图:
开始进入代码部分:
一、在Studio的清单文件中,修改主题theme,隐藏ActionBar
<activity android:name=".MainActivity" android:theme="@style/Theme.AppCompat.Light.NoActionBar"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> 二、在布局文件中声明toolbar(v7包下)<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"> <!--设置ToolBar的背景颜色可以把ToolBar直接当容器去用--> <android.support.v7.widget.Toolbar android:id="@+id/toolBar" android:background="#FFD69711" android:layout_width="match_parent" android:layout_height="wrap_content"> </android.support.v7.widget.Toolbar> </RelativeLayout> 三、在res下创建一个包menu,在menu下在创建一个toolbar_menu.xml文件代码如下:其中SearchView就是搜索框
<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" tools:context=".MainActivity" > <item android:id="@+id/ab_search" android:orderInCategory="60" android:title="action_search" app:actionViewClass="android.support.v7.widget.SearchView" app:showAsAction="ifRoom"/> <item android:id="@+id/item1" android:title="item1" /> <item android:id="@+id/item2" android:title="item2" /> </menu>四、在MainActivity编写代码,实现初始化toolbar以及个性设置,并重写onCreateOptionsMenu方法。
具体代码如下:public class MainActivity extends AppCompatActivity { private Toolbar toolBar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //初始化 toolBar = (Toolbar) findViewById(R.id.toolBar); //设置主标题,必须要在setSupportActionBar代码执行顺序的前面 toolBar.setTitle("主标题"); //必须有的一步操作,参数就是toolBar对象 setSupportActionBar(toolBar); //设置APP logo toolBar.setLogo(R.mipmap.ic_launcher); //设置子标题,会出现在主标题的正下方 toolBar.setSubtitle("子标题"); //往ToolBar填充菜单布局,起效果必须要复写onCreateOptionsMenu方法 toolBar.inflateMenu(R.menu.toolbar_menu); //设置右上角的菜单点击事件的监听 toolBar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { Toast.makeText(MainActivity.this, "哈哈哈哈哈", Toast.LENGTH_SHORT).show(); return true; } }); } //使用getMenuInflater()填充Menu布局,第二个参数固定是menu,返回值为true,才有效果。 @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.toolbar_menu,menu); return true; } }