Material Design包下的ToolBar已经在逐步取代以前ActionBar的地位了,相比较之下,ToolBar更加显得灵活,已经不局限于一个简单的标题栏。
更像是一个自由的控件。
如何给ToolBar设置左侧图标。
ToolBar左侧的图标其实很讲究的,之前在不了解情况前,我使用了一种比较蠢得方法,就是在ToolBar内放置了一个gravity为left的ImageView。
上面那种方法太蠢了,不过也算一种方法,还有一种是两个属性。app:logo和app:navigationIcon。
请注意,这里的app就是自定义命名空间了。其中设置logo属性后的监听事件不清楚怎么做,之前试了onOptionsItemSelected()方法,也没有作用。
设置app:navigationIcon,后的点击事件很简单。也有两种方法,如下:
- 第一种,Activity内重写onOptionsItemSelected(MenuItem item)方法,可见这个导航图标的默认id就是android.R.id.home
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
。。。逻辑代码
}
return super.onOptionsItemSelected(item);
}*/
- 第二种,就是直接设置toolbar.setNavigationOnClickListener(View.onCickListener),这里的点击事件你没有看错,没什么特殊的,就是View的onClick事件。我们可以看看toolbar的源码:
private ImageButton mNavButtonView;
/**
* Set the icon to use for the toolbar's navigation button.
*
* <p>The navigation button appears at the start of the toolbar if present. Setting an icon
* will make the navigation button visible.</p>
*
* <p>If you use a navigation icon you should also set a description for its action using
* {@link #setNavigationContentDescription(int)}. This is used for accessibility and
* tooltips.</p>
*
* @param icon Drawable to set, may be null to clear the icon
*/
public void setNavigationIcon(@Nullable Drawable icon) {
if (icon != null) {
ensureNavButtonView();
if (!isChildOrHidden(mNavButtonView)) {
addSystemView(mNavButtonView, true);
}
} else if (mNavButtonView != null && isChildOrHidden(mNavButtonView)) {
removeView(mNavButtonView);
mHiddenViews.remove(mNavButtonView);
}
if (mNavButtonView != null) {
mNavButtonView.setImageDrawable(icon);
}
}
/**
* Return the current drawable used as the navigation icon.
*
* @return The navigation icon drawable
*/
@Nullable
public Drawable getNavigationIcon() {
return mNavButtonView != null ? mNavButtonView.getDrawable() : null;
}
/**
* Set a listener to respond to navigation events.
*
* <p>This listener will be called whenever the user clicks the navigation button
* at the start of the toolbar. An icon must be set for the navigation button to appear.</p>
*
* @param listener Listener to set
* @see #setNavigationIcon(android.graphics.drawable.Drawable)
*/
public void setNavigationOnClickListener(OnClickListener listener) {
ensureNavButtonView();
mNavButtonView.setOnClickListener(listener);
}
可见这里的导航图标就是ToolBar内部自己定义的ImageButton了。