android Toolbar使用

Toolbar与Actionbar最大的不同,个人认为是toolbar可以自由定制,关于Toolbar的基本使用这里不做讲述,这里来说下自定义toolbar的使用,首先最常见的是,我们一般把toolbar作为标题栏来使用,而toolbar默认的文字是在左侧显示,而大部分时候我们希望标题的文字是在中间显示,那么如何实现呢,查看源码我们发现,toolbar继承自viewgroup的,那么我们可以在toolbar里面添加一个textview居中显示,把原本的title设置为空,布局如下:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingTop="@dimen/toolbar_padding_top"
    android:background="@color/primary_color"
    android:minHeight="?attr/actionBarSize"
    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light" >

    <TextView
        android:id="@+id/base_tv_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:textSize="20sp"
        android:textStyle="bold"
        android:text="居中"/>

    </android.support.v7.widget.Toolbar>

代码:

private void initToolbar() {
        toolbar = (Toolbar) findViewById(R.id.toolbar);
        toolbar.setTitle("");
        title = (TextView)toolbar.findViewById(R.id.base_tv_title);
    }

然后我们可以设置自己想要显示的标题了:

if (toolbar != null) {
            setSupportActionBar(toolbar);
            title.setText("首页");
        }

效果如下:
效果图

左边一般我们也有返回的图标,这个可以直接用toolbar的属性实现,代码如下:

toolbar.setNavigationIcon(R.drawable.left_back);

点击事件:

toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(MainActivity.this, "Navigation is click", Toast.LENGTH_SHORT).show();
            }
        });

而对于右边,我们可以用菜单来实现,如果是单纯的一个文字,我们直接在xml文件中定义一个菜单,如下:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context=".MainActivity">
    <item
        android:id="@+id/action_settings"
        android:orderInCategory="100"
        android:title="设置"
        app:showAsAction="always" />
</menu>

关于showAsAction属性,always是一直显示出来;never是不显示出来;ifRoom是会显示在Item中,但是如果已经有4个或者4个以上的Item时会隐藏在溢出列表中。当然个数并不仅仅局限于4个,依据屏幕的宽窄而定;如果同时设置了icon和title,默认只会显示icon,如果想同时显示title和icon,可以加入app:showAsAction=”always|withText”,但是即便这样也不会一定生效,withText对actionBar的title来说只是一个hint,在条件允许的情况下actionBar会显示title,但是当设置了icon并由于空间限制也不会显示title。不过,官方还是建议我们设置title的,在长按icon的情况下title就会出现,另外官方还建议showAsAction最好设置为ifRoom,如果设置为always可能会在比较窄的屏幕上带来布局的问题。
然后代码中如下:

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.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();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

这样机会实现上面的那个右边显示设置的样式,点击事件在onOptionsItemSelected中做处理。
自定义样式大概就如此了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值