ToolBar左侧图标设置以及点击事件配置

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了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值