我的第一篇CSDN博客--ToolBar的简单使用

前言

先让我感慨一波,步入公司,就觉得自己真的是荒度了青春啊,好多东西要学,好多东西要看,时间真是公平的,浪费的迟早要还回来的;言归正传,这是我的第一篇博客,也是第一次发表这种博客,为自己打个良好的开端,写的不好多多见谅!以下只是我的个人学习心得,要是有想一起学习的小伙伴,欢迎关注与交流~~


ToolBar与ActionBar的渊源

ToolBar与我们之前写过的ActionBar看起来貌似没有什么两样,但为什么要学习ToolBar而不使用ActionBar呢?首先ActionBar由于其设计的原因,被限定只能位于活动的顶部,从而不能实现一些Material Design的效果,所以官方现在已经不建议使用ActionBar了;而ToolBar不仅继承了ActionBar的所有功能,而且可以配合其他控件来完成一些Material Design的效果,具体看下文;


ToolBar的使用

首先在AndroidManifest.xml中看到android:theme="@style/AppTheme"> 此时的主题是在styles文件中的名为AppTheme的主题。进入styles.xml文件中看到:

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

</resources>

各个位置的设置请看:
位置设置
这个主题的父类路径是Theme.AppCompat.Light.DarkActionBar,其实这是一个actionbar,所以要想改成toolbar,就把其改为:Theme.AppCompat.Light.NoActionBar这时我们将ActionBar隐藏起来了,接下来就要显示ToolBar界面了。修改layout文件,如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <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" />

</LinearLayout>

其中主要是中间的那一部分,我们挨着解释:
首先看第二行,这里使用了xmln:app这个新的命名方式,我们正是用了xmlns:android这个命名来制定空间,所以我们才能用android:id,android:layout_high等写法,所以指定xmlns:app就是可以使用app:attribute这样的写法。接下来定义了一个ToolBar控件,这个控件由v7库提供,?attr意思是在style中定义的属性。这个写完之后修改Activity中的代码:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.test);

    mToolBar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(mToolBar);
}

setSupportActionBar这个方法作用是将ToolBar的实例传入,它现在就是一个ToolBar,具备实现Material Design效果的能力。修改标题在AndriodManifest.xml中指定:android:label= “xxx”;

添加action按钮:

创建menu文件夹,再new Menu resource file,创建一个.xml文件,写如下:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/insert"
        android:icon="@drawable/insert"  //图标
        android:title="insert"           //文字
        app:showAsAction="always" />

    <item
        android:id="@+id/fill"
        android:icon="@drawable/fill"
        android:title="fill"
        app:showAsAction="ifRoom" />
    <item
        android:id="@+id/mswitch"
        android:icon="@drawable/mswitch"
        android:title="mySwitch"
        app:showAsAction="never" />
</menu>

通过item标签来定义action按钮,showAsAction指定按钮的位置,之所以使用app命名空间,主要是为了兼容低版本的系统。
showAsAction主要有以下几种值:always表示永远显示在ToolBar中,如果屏幕不够不显示;ifRoom表示屏幕空间够用的时候才显示;never表示一直显示在菜单当中。菜单中的action按钮要显示图标的话,要用withtext(放在app:showAsAction)

修改Toolbar popup menu 弹出位置

我们可以看到,popup menu的位置是过于偏上的,我们还可以修改它的位置,使它处于Toolbar之下,这样看起来可能更美观:
修改styles.xml文件如下:

<!-- toolbar弹出菜单样式 -->
<style name="ToolbarPopupTheme" parent="@style/ThemeOverlay.AppCompat.Dark">
    <item name="android:colorBackground">@color/colorPrimary</item> //改背景色
    <item name="actionOverflowMenuStyle">@style/OverflowMenuStyle</item> //添加一个item控制menu
</style>

<style name="OverflowMenuStyle" parent="Widget.AppCompat.Light.PopupMenu.Overflow">
    <item name="overlapAnchor">false</item>  <!--把该属性改为false即可使menu位置位于toolbar之下-->
</style>

主活动中点击事件的添加

//将你自定义的action载入到view中
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.toolbar, menu);
//        mToolBar.setNavigationIcon(R.mipmap.new_left);
    return true;
}
//点击事件实现
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.fill:
            Toast.makeText(MainActivity.this, "You clicked fill",
                    Toast.LENGTH_SHORT).show();
            break;
        default:
    }
    return true;
}

到此为止ToolBar的使用就结束了,欢迎大佬们来批评指导哟~~


android第一行代码 郭霖著

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值