toolbar的使用姿势

toolbar的使用姿势

Toolbar作为替代ActionBar的控件,Toolbar没有ActionBar所让人诟病的使用不方便

初步使用

Toolbar的使用非常简单。只要在我的布局文件中把Toolbar控件加入:

<android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

然后在Activity文件中和处理普通控件一样通过findViewById()方法找到该控件,并通过Activity的setSupportActionBar(Toolbar)方法进行设置即可。在这里我为toolbar设置了一个导航图标:(我使用的v7包下的Toolbar,因此Activity需要是FragmentActivity的子类)

 mToolbar= (Toolbar) findViewById(R.id.toolbar);
 setSupportActionBar(mToolbar);
 mToolbar.setNavigationIcon(R.drawable.nav);

执行!出现了如下的错误:

造成该问题的原因在于我当前的Activity上已经有了一个ActionBar,因此不能再添加一个Toolbar。解决该问题有s三种种方式:

  1. 修改style文件中的AppTheme的内容,使得ActionBar不能使用:

    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
           -- Customize your theme here. -->
           <item name="colorPrimary">@color/colorPrimary
           "colorPrimaryDark">@color/colorPrimaryDark
           "colorAccent">@color/colorAccent
           
           
       style>
  2. 修改manifest文件中的Activity的主题,选择一个不带ActionBar的系统主题

    <application
           android:allowBackup="true"
           android:icon="@mipmap/ic_launcher"
           android:label="@string/app_name"
           android:supportsRtl="true"
           android:theme="@style/Theme.AppCompat.Light.NoActionBar">
      ...
      application>
  3. 第三种方法实在上和第二种方式类似,但自定义空间大,同样是修改style文件。在style文件中直接新建一个style,然该style直接继承系统不带ActionBar的style,然后在manifest文件中使用该主题

    <style name="AppTheme.NoTitleBar" parent="Theme.AppCompat.DayNight.NoActionBar">style>
    
    <application
           android:allowBackup="true"
           android:icon="@mipmap/ic_launcher"
           android:label="@string/app_name"
           android:supportsRtl="true"
           android:theme="@style/AppTheme.NoTitleBar">
     application>

## 添加功能

根据Android的官方文档中提到的的内容:

按照官方文档上所说的的,Toolbar中可以添加5类功能

  1. 一个导航图标
  2. 一个App的logo图标
  3. 一个标题和副标题
  4. 一个或多个自定义控件
  5. 菜单

    上图是把Toolbar中能够添加的控件全部添加后的界面。(搞一下知乎,嘻嘻)

    实现上面效果的代码如下:

    布局文件:在Toolbar中能够直接添加控件。(Toolbar毕竟是继承ViewGroup的控件)

    <android.support.v7.widget.Toolbar
           android:id="@+id/toolbar"
           android:layout_width="match_parent"
           android:layout_height="wrap_content" >
           <TextView
               android:text="你好"
               android:layout_width="wrap_content"
               android:layout_height="wrap_content"/>
           <ImageView
               android:layout_marginLeft="20dp"
               android:src="@drawable/clock"
               android:layout_width="wrap_content"
               android:layout_height="wrap_content" />
           android.support.v7.widget.Toolbar>

    菜单文件:

    <menu xmlns:android="http://schemas.android.com/apk/res/android"
       xmlns:app="http://schemas.android.com/apk/res-auto">
       <item android:id="@+id/setting"
           android:title="setting"
           app:showAsAction="never"/>
    menu>

    android推荐在使用showAsAction属性时使用 app的的属性而不是使用android属性

    Activity中的代码

    @Override
       protected void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
           setContentView(R.layout.activity_main);
           mToolbar = (Toolbar) findViewById(R.id.toolbar);
           mToolbar.setNavigationIcon(R.drawable.nav);
           mToolbar.setLogo(R.drawable.zhihu);
           mToolbar.setTitle("知乎");
           mToolbar.setSubtitle("仿冒一下");
           setSupportActionBar(mToolbar);
       }
    
       @Override
       public boolean onCreateOptionsMenu(Menu menu) {
           MenuInflater menuInflater = getMenuInflater();
           menuInflater.inflate(R.menu.menu, menu);
           return true;
       }

    在这中间有几点需要注意:

  6. setSupportActionBar()方法的调用地方

    如果setSupportActionBar() 调用的位置太靠前,会使得Toolbar的部分设置没有效果,例如把setSupportActionBar()方法在setTitle方法前调用,Toolbar的title将显示我们的项目名,而不是我所填写的知乎。最好是在Toolbar的所有设置都已经完成后调用setSupportActionBar()方法。

  7. menu的使用

    在Toolbar中有一个inflateMenu()的方法,通过该方法可以设置Toolbar上面的OptionsMenu,但是当调用了setSupportActionBar()方法后该设置将无效,因此还是在Activity的onCreateOptionsMenu()方法中设置OptionsMenu。

你可能感兴趣的:(Android)