关于ToolBar的一点理解

   由于android里面的ActionBar笔记丑陋,而且比较死板,所以ActionBar现在基本废弃不用啦。取而代之的是ToolBar,ToolBar既可以当普通的控件使用,也可以用来代替ActionBar实现ActionBar里面嵌套一些菜单的作用。ToolBar有两种用法,一种是用来当ActionBar用,第二种是当作普通控件用。下面先介绍一下第一种的用法,首先我们需要在Android的res目录下的styles文件下,添加下面两项内容
<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</item>
这两项内容的添加是为了将ActionBar隐藏,早一点的版本ActionBar也叫做TitleBar,所以需要加上第一项,如果不加上这两项,ActionBar即使在布局上看不到,ToolBar也会替换不了ActionBar,替换的时候代码运行会出错,注意加上这两项的时候,name那项引号那里不要加android:写代码的时候开发工具一般会默认加上。添加这两项之后,接下来我们在布局里面写一个ToolBar
<android.support.v7.widget.Toolbar
    android:id="@+id/tool_bar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:background="@color/colorPrimary"></android.support.v7.widget.Toolbar>
ToolBar有两种版本,v7的版本是比较早的,使用这个版本是为了向下兼容低版本,注意这里加上包名。接着我们在java代码中
tooBar = (Toolbar) findViewById(R.id.tool_bar);
tooBar.setTitle("title");
setSupportActionBar(tooBar);

找到toobar并且设置标题,当然也可以在布局中设置它的一些属性。然后通过setSupportActionBar(tooBar)方法将它替换ActionBar,接着我们还需要实现

@Override
public boolean onOptionsItemSelected(MenuItem item) {
   
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
 
}
这两个方法,这两个方法是为了创建ActionBar的那个上下文菜单,onOptionsItemSelected()方法是监听选中菜单项的状态做出响应,onCreateOptionsMenu()是初始化上下文菜单,创建菜单既可以手动创建,也可以在menu菜单下添加菜单项和属性。

ToolBar的第二种使用方法是和基本的控件一样的,但是如果是普通的控件下面两个方法就不再能支持菜单项的使用,因为这两个方法是和ActionBar配合使用的方法,因此我们必须手动加载menu,并且设置监听器

toolbar.inflateMenu(R.menu.main);
//设置菜单项的点击事件
toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
    @Override
    public boolean onMenuItemClick(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.menu1:
                Toast.makeText(MainActivity.this, "menu1", Toast.LENGTH_SHORT).show();
                break;
        }
        return true;
    }
});
另外需要注意的是在menu资源菜单下创建菜单项的时候我们在设置ShowAsAction属性的时候需要自定义一个命名空间,也就是说前面加上一个自定义的名字,不是android:

,但是一般加的是app:,不然会报错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值