返回

ToolBar封装策略,一文读懂ToolBar的封装全过程

Android

工具栏封装策略

封装工具栏有许多策略,这里介绍几种最常见的方法。

策略一:使用原生toolbar进行封装

  1. 处理ToolBar的返回事件
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        if (mDrawerToggle.onOptionsItemSelected(this, mMenuItem)) {
            return true;
        }
    }
    return super.onKeyDown(keyCode, event);
}
  1. 处理中间Title重写setTitle()
@Override
public void setTitle(CharSequence title) {
    mToolbar.setTitle(title);
    mDrawerToggle.setDrawerIndicatorEnabled(true);
}
  1. 处理右侧可能是文字或图片按钮中间可能是多按钮
mToolbar.inflateMenu(R.menu.menu_main);
mToolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
    @Override
    public boolean onMenuItemClick(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.action_settings:
                // Handle action settings
                return true;
            case R.id.action_favorite:
                // Handle action favorite
                return true;
            default:
                return false;
        }
    }
});
  1. 所谓的沉浸式
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="android:windowTranslucentStatus">true</item>
    <item name="android:windowTranslucentNavigation">true</item>
</style>
  1. 最后使用超简单
<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:background="?attr/colorPrimary"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

策略二:使用第三方库进行封装

目前有许多第三方库可以帮助您封装ToolBar,例如:

这些库提供了许多开箱即用的功能,可以帮助您快速构建ToolBar。

策略三:自定义ToolBar

如果您需要更加灵活的ToolBar,您也可以自定义ToolBar。您可以继承ToolBar类,并重写其方法以实现您想要的功能。

总结

ToolBar封装有许多策略,您可以根据您的需要选择合适的策略。如果您需要快速构建ToolBar,可以使用第三方库。如果您需要更加灵活的ToolBar,您可以自定义ToolBar。