Toolbar

Toolbar

Toolbar 是在 Android 5.0 开始推出的一个 Material Design 风格的导航控件。由于他的可定制度高,所以已经逐步替代掉了ActionBar。可以自定义以下几种元素,实现不同风格呃Toolbar:

  • 设置导航栏图标
  • 设置App的logo
  • 支持设置标题和子标题
  • 支持添加一个或多个的自定义控件
  • 支持Action Menu

Toolbar基础使用

Toolbar是Android 5.0推出的,所以为了实现向下兼容,可以使用兼容包appcompat-v7里的Toolbar。

首先编写activity_main布局文件



    
    



编写Toolbar的Menu布局文件



    
    
    
    

创建Activity

public class MainActivity extends AppCompatActivity {
    private Toolbar mToolbar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //去掉自带的ActionBar
        supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);
        initView();
        initEvents();
    }

    private void initEvents() {
        //设置menu监听器
        mToolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                int menuItemId = item.getItemId();
                switch (menuItemId) {
                    case R.id.menu_close:
                        Toast.makeText(MainActivity.this, R.string.menu_item1, Toast.LENGTH_SHORT).show();
                        break;
                    case R.id.menu_about:
                        Toast.makeText(MainActivity.this, R.string.menu_item2, Toast.LENGTH_SHORT).show();
                        break;
                    case R.id.menu_search:
                        Toast.makeText(MainActivity.this, R.string.menu_search, Toast.LENGTH_SHORT).show();
                        break;
                    case R.id.menu_notification:
                        Toast.makeText(MainActivity.this, R.string.menu_notification, Toast.LENGTH_SHORT).show();
                        break;
                }
                return true;
            }
        });
    }

    private void initView() {
        mToolbar = (Toolbar) findViewById(R.id.tool_bar);
        //设置导航栏图标
        mToolbar.setNavigationIcon(R.mipmap.ic_drawer_home);
        //设置app logo
        mToolbar.setLogo(R.mipmap.ic_launcher);
        //设置主标题
        mToolbar.setTitle("Title");
        //设置主标题文本的字体,大小,颜色等主题属性
        mToolbar.setTitleTextAppearance(getApplicationContext(), R.style.Theme_Toolbar_Base_Title);
        //设置子标题
        mToolbar.setSubtitle("Subtitle");
        //设置子标题文本的字体,大小,颜色等主题属性
        mToolbar.setSubtitleTextAppearance(getApplicationContext(), R.style.Theme_Toolbar_Base_Subtitle);
        //加载menu布局文件
        mToolbar.inflateMenu(R.menu.tool_bar_menu);
    }
}

注意:

  1. 在使用Toolbar之前一定要去掉系统自带的ActionBar,可以给Activity使用NoActionBar主题,或者在setContentView()之前调用supportRequestWindowFeature(Window.FEATURE_NO_TITLE)(或者是requestWindowFeature(Window.FEATURE_NO_TITLE))。
  2. setTitleTextColor、setTitleTextAppearance、setSubtitleTextColor、setSubtitleTextAppearance可以在代码中修改相应的文本字体大小和颜色。

注意点

XML属性

使用appcompat-v7兼容包内的Toolbar时,自身定义的属性必须使用xmlns:app="http://schemas.android.com/apk/res-auto"该语句指定空间命名来调用,例如popupTheme属性...否则运行起来没有效果。

设置Toolbar Menu item文本的字体,颜色和大小

之前改变了主标题和子标题文本的字体,大小,颜色样式。那么怎么修改menu item的呢。这里就需要Toolbar自定义的属性:popupTheme来实现。通过该属性可以为弹出的现实窗口设置主题。例如在values/styles,自定义menu item样式,


由于Toolbar继承自View,所以还有一个属性android:theme可以指定整个View的风格。通常我们通过该属性来修改默认的menu icon。




Menu Resources

在编写Menu Resources时,有一个属性需要注意下:orderInCategory。该属性决定menu item排列顺序,值的类型是integer,值越大,顺序越靠后。




在弹窗中显示的顺序就是About在Close之前。

参考官方文档Menu Resource

Material Design

在官方培训文档有一句话:
The Material Design specification recommends that app bars have an elevation of 4 dp.大致意思是Toolbar应该悬浮4dp的高度。这个高度通过android:elevation="4dp"属性设置

实践效果

Toolbar_第1张图片
Toolbar.png
Toolbar_第2张图片
Menu Item Theme.png

参考

Android开发:最详细的 Toolbar 开发实践总结

android:ToolBar详解(手把手教程)

你可能感兴趣的:(Toolbar)