ToolBar左侧图标设置以及点击事件配置
2016-05-05 23:28
543 查看
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
第二种,就是直接设置toolbar.setNavigationOnClickListener(View.onCickListener),这里的点击事件你没有看错,没什么特殊的,就是View的onClick事件。我们可以看看toolbar的源码:
可见这里的导航图标就是ToolBar内部自己定义的ImageButton了。
更像是一个自由的控件。
如何给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了。
相关文章推荐
- 真机上装不上测试应用,Installation error: INSTALL_FAILED_INSUFFICIENT_STORAGE
- iOS: 极光推送
- C++1
- PHP 水印设置
- 关于Xml文件读取
- 在form中启用会计科目弹性域
- 批量ping脚本
- 最短路之Dijkstra
- 精度评定中的准确率(Precision)和召回率(Recall)
- Linux 之 rsyslog
- 流程分析—活动图、状态机图、顺序图
- Lua 解释器
- linux下C 和 C++ include搜索的路径
- MVP模式在Android开发中的应用
- flux
- 编程4 兔子生崽问题--一个Fibonacci数列
- java web 工作原理
- Linux每天学习一个命令之cut命令
- 1047,编程团体赛,PAT
- 一个wooyun正则