使用Toolbar过程中的几个坑

在堕落沉沦了快2年之后,我又开始坚持学习了,什么感情乱七八糟的都是shit,只有自己强了,才有资格去追逐别的东西,不然怎么都没用,前端了解了一点点,后端了解了一点点,移动端知识还算够用,只是代码撸得少了点,但总会好的,万事起于忽微,量变引起质变。

一 、Toolbar的样式

不用记,直接copy,想怎么用就怎么用,拿去直接改。

<style name="AppTheme.ToolBar" parent="AppTheme">
    <!--ToolBar 字体颜色改为白色 -->
    <item name="titleTextColor">@android:color/white</item>
    <!-- 溢出菜单图标颜色 -->
    <item name="colorControlNormal">@android:color/white</item>
    <!-- 右侧溢出菜单图标自定义 -->
   <item name="actionOverflowButtonStyle">@style/ActionButton.Overflow</item>
    <!-- 是否覆盖锚点,默认为true,即盖住 Toolbar -->
    <item name="overlapAnchor">false</item>
    <!-- 弹出层背景颜色 -->
    <item name="android:colorBackground">@android:color/darker_gray</item>
    <!-- 设置弹出菜单文字颜色 -->
    <item name="android:textColor">@android:color/white</item>
    <!-- 弹出层垂直方向上的偏移,即在竖直方向上距离Toolbar的距离,值为负则会盖住Toolbar -->
    <item name="android:dropDownVerticalOffset">0dp</item>
    <!-- 弹出层水平方向上的偏移,即距离屏幕左边的距离,负值会导致右边出现空隙 -->
    <item name="android:dropDownHorizontalOffset">0dp</item>
</style>
<!-- 右侧溢出菜单图标自定义 -->
<style name="ActionButton.Overflow" parent="android:Widget.ActionButton.Overflow">
    <item name="android:src">@drawable/daohanggengduo</item>
</style>

二、和DrawerLayout结合使用时,设置NavigationIcon不起作用

切记,一定要在和DrawerLayout整合完了之后再设置这个属性,不然死都不会改变的,标准如下:

toolbar.inflateMenu(R.menu.main_toolbar_menu);
setSupportActionBar(toolbar);
//把DrawerLayout的委托给ActionBarDrawerToggle
ActionBarDrawerToggle actionBarDrawerToggle = new ActionBarDrawerToggle(this, drawlayout, toolbar, R.string.draw_open, R.string.draw_close) {
    @Override
    public void onDrawerOpened(View drawerView) {
        super.onDrawerOpened(drawerView);
    }

    @Override
    public void onDrawerClosed(View drawerView) {
        super.onDrawerClosed(drawerView);
    }
};
actionBarDrawerToggle.syncState();
drawlayout.addDrawerListener(actionBarDrawerToggle);
toolbar.setNavigationIcon(getResources().getDrawable(R.drawable.daohang));

三、Toolbar设置了Menu,但是不显示

一定要重写onCreateOptionsMenu()方法,不然死都不会出来的

/**
 * 必须重写此方法,不然Menu不显示
 * @param menu
 * @return
 */
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);
    getMenuInflater().inflate(R.menu.main_toolbar_menu, menu);
    return true;
}

四、menu菜单中,图片不显示

重写onMenuOpened,这里面的逻辑是固定写法,直接放在Activity里面就行了,没什么道理可讲的。

@Override
public boolean onMenuOpened(int featureId, Menu menu) {
    if (menu != null) {
        if (menu.getClass().getSimpleName().equalsIgnoreCase("MenuBuilder")) {
            try {
                Method method = menu.getClass().getDeclaredMethod("setOptionalIconsVisible", Boolean.TYPE);
                method.setAccessible(true);
                method.invoke(menu, true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    return super.onMenuOpened(featureId, menu);
}

五、Toolbar的使用

我自己在使用过程中总结了一些细节,满足大部分开发需求。
Toolbar的基本使用流程
和DrawerLayout结合使用
和SearchView结合使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值