关于Toolbar使用中的问题的解决方案

时间:2024-03-16 09:55:44

        正如大家熟知的,Toolbar是一个Material控件,他的出现基本上可以取代ActionBar。由于ActionBar被限定只能位于活动的顶部,从而不能实现一些Material Design的效果,因此官方现在已经不再建议使用ActionBar。

        首先,我们先来了解一下如何简单的使用Toolbar,当我们创建一个项目的时候,默认的会显示Actionbar,关于查看Actionbar就是第一步:先打开AndroidManifest.xml文件,然后在android:theme属性下只动了AppTheme的主题,这个主题就是继承DarkActionBar。这是一个深色的ActionBar主题。

<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>
            默认的ActionBar

           既然找到了创建项目是为我们默认设置的ActionBar,那么我们就需要将他更改为NoActionBar,这样就完成了Toolbar替代ActionBar的第一步。

<resources>

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

</resources>
更改后的ActionBar

        然后我们就需要在我们需要创建头布局的文件里面添加Toolbar控件。

<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:background="?attr/colorPrimary"
    ></android.support.v7.widget.Toolbar>

        这段代码就很容易理解,就是设置Toolbar的宽和高,高度的话我设置的是和ActionBar一样的高度,颜色用的是标题栏的默认颜色。这样就可以代替ActionBar了。

        然后我们需要在MainActivity中添加代码:

Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
        这样我们就完成了Toolbar的基本使用,和实现了ActionBar的基本效果。另外还要注意的是在导入Toolbar的库时要是导入
import android.support.v7.widget.Toolbar;

,否则的话可能报错。

                                关于Toolbar使用中的问题的解决方案

                                    效果如图所示    

        接下来我就来说说我在开发中遇到的一些问题,以及我自亲测有效的解决方案:

第一个问题:如果想要在文字的左边设置一个图标,该如何实现。

        这个问题算是比较简单了,网上有很多解决方案,本来一开始我用了最蠢的方法,也就是在Toolbar的内部添加了一个图标,然后放置在最左边,但在网上我学会了另一种方法,分享一下。

toolbar.setNavigationIcon(R.drawable.menu);

        很简单,只要加这一行代码,就可以添加一个左侧图标,然后我们获取他的点击事件就很容易:

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    switch (item.getItemId()) {
        case android.R.id.home:
            Toast.makeText(MainActivity.this,"aaaaa",Toast.LENGTH_SHORT).show();
            break;
    }
    return super.onOptionsItemSelected(item);
}

        其中R.id.home就是导航图标默认的id。

关于Toolbar使用中的问题的解决方案

第二个问题:如果Toolbar设置在Fragment里面,该如何让Toolbar生效?

        首先我们要明确的是Toolbar在Activity里面是需要调用setSupportActionBar()方法的,而在fragment里面你会发现居然没有这个方法,那么具体应该怎么实现呢?

((AppCompatActivity)mContext).setSupportActionBar(toolbar);
setHasOptionsMenu(true);

        注意的是这里我没有写具体详细的代码,这里只是将上下转文换成AppCompatActivity类型。下面这句就是在设置他的menu中需要的。

第三个问题:如何隐藏项目的名字,有时候我们会遇到自定义标题,但是不需要项目名称,那么该怎么隐藏?

        一开始我的想法是将配置文件中的Label标签改变为空字符串,这样就不会有项目名,但是发现这样在应用名也会变成空。这时候我们只需要将Toolbar的setTitle()方法设置为空就ok了。

toolbar.setTitle("");

        但是要注意的是,这行代码一定要放在setSupportActionBar的前面,要不然不会有效果的。

关于Toolbar使用中的问题的解决方案