概述
Material Design(以下简称md)是google在2014年的 I/O大会上推出的android设计语言.15年I/O大会上推出了Design support库,这个库将md中最具代表性的一些效果和控件进行了封装,使得开发者可以更方便的来实现md设计语言.OK,开始学习吧!
toolbar
toolbar是用来替代actionbar的。actionbar只能固定在顶部,不能配合完成一些md效果。
toolbar的强大之处在于,他不仅继承了actionbar的所有功能,而且灵活性很高,可以其他来完成一些md效果。
开始学习
我们新建一个项目默认都是显示actionbar的,一般可以在manifest中通过修改theme来去掉actionbar:
noActionBar见名知意,light高亮的意思,也就是浅色的主题.这样就可以去除actionBar了.
现在我们已经将actionBar隐藏起来了,下面就使用toolbar来替代actionbar吧.
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/colorPrimary"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
/>
这里我们高度使用actionbar的高度就好,toolbar的颜色直接设置background.由于我们刚才在application那里指定了应用为浅色主题,因此现在toolbar也是浅色主题,而toolbar上的元素就会自动使用深色主题来和主题颜色区分开.我们可以使用theme来为toolbar单独指定主题.popupTheme是来设置菜单的主题的.
命名空间用app:是为了兼容5.0以下.appns快捷键直接生成命名空间.
然后在代码中设置:
mToolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(mToolbar);
OK,基本的toolbar效果就完成了….再来看下如何在toolbar上一些比较常用的功能吧.
修改toolbar显示文字
在manifest中的activity下加入label属性来指定toolbar的文字内容,如果没有指定的话默认会使用application中的label属性,也就是我们的APP名字.
添加按钮
在res目录下新建一个menu文件夹,然后新建xml文件就好.
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/tb_1"
android:icon="@mipmap/ic_launcher"
android:title="text1"
app:showAsAction="always"/>
<item
android:id="@+id/tb_2"
android:icon="@mipmap/ic_launcher"
android:title="text2"
app:showAsAction="ifRoom"/>
<item android:id="@+id/tb_3"
android:icon="@mipmap/ic_launcher"
android:title="text3"
app:showAsAction="never"/>
</menu>
我们使用item标签来定义action按钮,其中id自不用说,icon表示按钮的图标,title表示按钮的描述文字,showAsAction是决定按钮的显示位置,always是永远显示在toolbar中,ifRoom表示屏幕空间足够的话就显示在toolbar中,不足则显示在菜单中,never表示永远显示在菜单中.显示在toolbar的话只能显示图标没有文字,菜单中只有文字没有图标…然后就是在代码中创建和设置menu了.
在activity中重写onCreateOptionsMenu方法来创建menu
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//加载我们创建的menu的xml文件
getMenuInflater().inflate(R.menu.toolbar,menu);
return true;
}
重写onOptionsItemSelected来设置menu的点击事件
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.tb_1:
Toast.makeText(this, "text1", Toast.LENGTH_SHORT).show();
break;
case R.id.tb_2:
Toast.makeText(this, "text2", Toast.LENGTH_SHORT).show();
break;
case R.id.tb_3:
Toast.makeText(this, "text3", Toast.LENGTH_SHORT).show();
break;
case android.R.id.home:
mDrawerLayout.openDrawer(GravityCompat.START);
break;
}
return true;
}
暂时先写到这里…总结下就是在manifest中替换主题隐藏actionbar,xml中写toolbar,在activity中setSupportToolBar来让toolbar显示出来.在res中新建menu的资源文件夹以及menu下的xml资源文件,通过item来配置action按钮,重写onCreateOptionsMenu和onOptionsItemSelected来配置toolbar上action按钮的点击事件.
给dalao递茶,jpg
菜鸡一枚,有不对的地方还望dalao们指正.