ActionBar —- ToolBar
本来,在学习的时候看到的文章是介绍怎么在APP中加入ActionBar
的,但是随着逐渐的深入了解,发现现在已经被ToolBar
取代了.
ToolBar是在API 5.0以后增加的一个东西,同时在support library v7里面支持低API版本
原生的ActionBar是独立于View系统的一个东西。ToolBar是一个View,在Layout文件中直接定义,然后可以当作普通的View添加到任何地方。
<android.support.v7.widget.Toolbar
android:id="@+id/my_toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
android:elevation="4dp"
app:popupTheme="@style/Theme.AppCompat.Light"/>
这样,你可以直接在Design
视图里面看到这个ToolBar
然后,可以将之当作原来的ActionBar
来使用
首先要取消掉原生的ActionBar
,Theme设置里面,将parent
改成没有ActionBar的主题
例如<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
然后再java文件中如下定义
Toolbar toolbar = (Toolbar)findViewById(R.id.mytoolbar);
setSupportActionBar(toolbar);
其他操作例如添加选项,和原来一样
可以方便的使用View的操作,例如获取ToolBar的高度 toolbar.getHeight()
提示:如果使用了setSupportActionBar(toolbar)
,那么原来针对ActionBar的操作都有效
如果没有使用这个,可以像普通VIEW一样操作ToolBar上的内容
toolbar.inflateMenu(R.menu.base_toolbar_menu);//设置右上角的填充菜单
toolbar.setOnMenuItemClickListener(...);//设置点击事件
这里有一个问题。原来的Actionbar如果使用Hide()
操作以后,会有一个隐藏的动画,就像常见的那样
但是这里使用Toolbar代替以后,使用Hide()
操作,没有隐藏动画,直接消失了。不知道为什么,也不知道怎么解决。
后来,在网上找了半天,发现很多开发者使用的替代方法,不调用hide()
,而是使用一个translationY()
,也就是Y方向的移动
toolbar.animate().translationY(-toolbar.getHeight())
.setInterpolator(new AccelerateInterpolator(2));
animate()是用来增加一个移动动画,setInterpolator是设置动画的特效。具体的还没有仔细研究。
这样,效果和原来的一样。新的Toolbar的设置比原来的ACTIONBAR直接一点,比如下面要讲到的背景和透明度问题
设置透明度
想要给ACTIONBAR设置透明度,找了半天找不到方法。网上的资源说,需要设置主题,然后设置ActionBar的背景,但是我设置半天也没有成功,莫名其妙
后来转用ToolBar就解决了,设置Toolbar背景的方法和普通View一样
要设置toolbar透明,原先想到的是直接将这个view设置透明度
toolbar.setAlpha()
但是这样会让整个部件包括文字也透明,所以,需要只将背景设置为透明
方法1,用ARGB代码设置
ARGB代码就是在RGB的基础上增加一个A,也就是透明度ALPHA,前两位标识背景的透明度
方法2,用java代码设置
toolbar.getBackground().setAlpha(200);
注意,这样会把BACKGROUND的颜色改变,其他引用这个颜色的地方也会改变
总之,原来的ActionBar要设置透明度啊,设置背景什么的,弄半天也没有成功,转用ToolBar就十分容易
既然官方推荐使用Toolbar,那何乐而不为呢?
更多信息应该在官方开发者网站上查询