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);

執行!出現瞭如下的錯誤:

toolbar _set_err

造成該問題的原因在於我當前的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</item>
           <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
           <item name="colorAccent">@color/colorAccent</item>
           <!--<item name="windowActionBar">false</item>-->
           <!--<item name="windowNoTitle">true</item>-->
       </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>
    <!-------menifest------->
    <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_introduce

按照官方文檔上所說的的,Toolbar中可以添加5類功能

  1. 一個導航圖標
  2. 一個App的logo圖標
  3. 一個標題和副標題
  4. 一個或多個自定義控件
  5. 菜單

    all

    上圖是把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。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章