前言:
ToolBar是ActionBar一种延伸的产物。尽管ActionBar是作为Activity不透明窗体装饰的一部分,但是ToolBar却可以放置在一个视图层的任意层中。应用也可以使用setActionBar()
方法指定ToolBar为ActionBar。
ToolBar比ActionBar有着更多值得人们关注的特性。从头到尾,一个ToolBar可能包含以下可选元素的组合。
导航按钮:它也许是一个向上的箭头图标,用来导航菜单的切换,关闭或者象征app其他的操作。若设置了ToolBar的最小高度,
那么导航按钮在垂直方向上会与ToolBar的最小高度一致。
图标:它有可能会延伸至ToolBar的高度,但其宽度是任意的。
标题和子标题:标题应该是充当当前ToolBar的一个指示牌。而子标题则是用来描述一些额外的信息。如果一个应用使用了图标,
那么应该将标题和子标题都予以省略掉。
一个或多个自定义控件:应用可能会添加一个子控件到ToolBar中,那么子控件的添加就会显示在这个位置上。如果一个子控件将
Toolbar.LayoutParams的Gravity
设置为CENTER_HORIZONTAL
,那么,子控件就会尽量在所有元素被测量之后所确定的
空间中予以居中。
活动菜单:活动菜单是位于ToolBar的最末端。如果设置了ToolBar的最小高度的话,那么,活动菜单总是与ToolBar的最小高度对齐。
例如ToolBar基本使用的示例源码的效果图所示:
熟悉ToolBar的基本使用:
设置ToolBar为Activity的app bar
1>
添加v7 appcompat 支持库到你的工程,正如 Support Library Setup所描述的一样
2>
确保Activity是继承于AppCompatActivity :
public class MyActivity extends AppCompatActivity { // ... }
须知:对于需要将ToolBar作为app bar的应用而言,其每一个activity都需要这么做
3>
在应用的manifest中,设置<application> 节点为一个带有NoActionBar
的appcompat的主题。这样就能阻止 ActionBar去作为 app bar
<application android:theme="@style/Theme.AppCompat.Light.NoActionBar" />
4>
添加一个ToolBar到activity的布局中,例如如下所示:
<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" android:theme="@style/ThemeOverlay.AppCompat.ActionBar" app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>
Material Design specification 建议app bar 有一个 4dp 的高度值 ;
由于你使用ToolBar作为 app bar,所以你应该将 ToolBar 放置在 activity 布局 的顶部
5>
在activity的方法中,调用方法并传入activity的ToolBar,这个方法就会将ToolBar设置为activity的app bar 了。例如:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_my); Toolbar myToolbar = (Toolbar) findViewById(R.id.my_toolbar); setSupportActionBar(myToolbar); }
你的app现在有一个基本的action bar了。这个action bar现在仅仅只包含一个当前app的名字和一个悬浮菜单。
这个菜单目前只包含一个Setting条目。你可以添加更多的活动到action bar和浮动菜单中,如 Adding and Handling Actions所描述的。
须知:
ToolBar可以通过 setSupportActionBar(ToolBar)方法与app bar联系起来去使用,但也可以不调用 setSupportActionBar(ToolBar)方法,
进而让ToolBar去作为一个独立的普通控件来使用,也就是我们不一定非得要让ToolBar去作为ActionBar来进行使用。
使用app bar中的实用方法:
一旦你将ToolBar设置为了activity的action bar,那么,你就可以使用v7 appcompat 支持库的action bar类的各种实用方法。
这种方式可以让你做很多有用的事,比如:隐藏和显示action bar。
为了能够使用ActionBar
的实用方法,你可以通过调用Activity的getSupportActionBar()
方法去得到ActionBar这个对象的引用。
一旦有了ActionBar这个引用,你就可以调用ActionBar的各种方法去调整app bar。例如通过调用ActionBar.hide()
去隐藏app bar。