使用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结合使用