Toolbar 总结

Toolbar其实是一个ActionBar的变体,大大扩展了Actionbar。我们可以像对待一个独立控件一样去使用ToolBar,可以将它放到屏幕的任何位置,不必拘泥于顶部,还可以将它改变高度或者是在ToolBar上使用动画。从最新的SDK看,很多actionbar的方法已经变成了废弃的了,所以我们可以断定未来就是Toolbar将会完全取代ActionBar!

1. 布局

可以直接在xml布局文件中设置

2. 与ActionBar 进行关联

        Toolbar toolbar = (Toolbar) findViewById(R.id.common_toolbar);
        setSupportActionBar(toolbar);

两个前提:

  • 主题中必须设置没有Actionbar( false 或者继承Theme.AppCompat.Light.NoActionBar主题 ),否则就会出现报里两个actionbar的错误
  • 当前Activity继承AppCompatActivity

3. 与ActionBar 不进行关联

不用去setSupportActionBar,也不用在activity中onCreateOptionsMenu,

  • 直接设置菜单及监听方法
  • 注意: 主题样式要继承自:Theme.AppCompat,否则会有显示问题
toolbar.inflateMenu(R.menu.aaa_menu_main);
        //setSupportActionBar(toolbar);
        toolbar.setNavigationIcon(getResources().getDrawable(R.drawable.ic_launcher));//设置导航按钮
        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                
            }
        });
        toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem menuItem) {
                int id = menuItem.getItemId();
                if (id == R.id.action_add_new_item) {


return true;
                } else {
                    return false;
                }
            }
        });

4. Toolbar 详细配置方法

        toolbar.setTitle("ToolBar Title");//设置标题
        toolbar.setSubtitle("This is subtitle");//设置子标题
        toolbar.setTitleTextColor(Color.parseColor("#ff0000"));//设置标题颜色
        toolbar.setLogo(R.drawable.ic_launcher);//设置logo图片
        toolbar.setNavigationIcon(drawable);//设置导航按钮

5. 添加自定义布局

可以往toolbar中添加一个或者任意多个自定义视图。它们将会在toolbar中出现。如果子视图的的布局属性是CENTER_HORIZONTAL(横向居中),那么这个视图会将在toolbar中其他元素 绘制好后 尽可能的在剩下的空间中居中显示。
Toolbar.LayoutParams 这个属性是toolbar的特有属性,用来添加子视图的


        TextView subView = new TextView(this);
        subView.setText("subTextView");
        //设定布局的各种参数
        Toolbar.LayoutParams params = new Toolbar.LayoutParams(
                Toolbar.LayoutParams.WRAP_CONTENT, 
                Toolbar.LayoutParams.WRAP_CONTENT,
                Gravity.CENTER);
        params.setMargins(3, 3, 3, 4);//设置外边界
        
        subView.setLayoutParams(params);
        toolbar.addView(subView);

6. 监听方法

  • OptionsMenu监听

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }


    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            Toast.makeText(getApplicationContext(), "setting", 0).show();
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
  • ToolBar中设置监听MenuItem的方法
    如果你通过toolbar添加了监听器,那么在onOptionsItemSelected()中就监听不到事件了,所以二选一吧。

toolbar.setOnMenuItemClickListener(new OnMenuItemClickListener() {
            
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                // TODO 自动生成的方法存根
                System.out.println("click + "+item.getItemId());
                return false;
            }
        });
  • 在ToolBar中设置NavigationIcon的监听器
    navigationIcon不能通过toolbar的setOnMenuItemListener()监听,可以在toolbar的setNavigationOnClickListener()中监听,也能在Activity的onOptionsItemSelected()中监听到,两种监听方式只能选择其一。

toolbar.setNavigationOnClickListener(new OnClickListener() {
            
            @Override
            public void onClick(View v) {
                // TODO 自动生成的方法存根
                System.out.println("click Navigation ");
            }
        });

你可能感兴趣的:(Toolbar 总结)