關于Toolbar你需要知道的各種sao姿勢。(操作篇)

什么是Toolbar?

appbar_sheets.png

頭到尾,工具欄可以包含以下可選的元素:

  • A navigation button(導航按鈕)。這里可能是向上箭頭,導航菜單,關閉,折疊,完成或應用程序中選擇的其他圖標。這個按鈕應始終用于訪問工具欄指定內容的容器內的其他導航目標,或者離開當前的上下文。
  • A branded logo image(標志性的logo圖片)。
  • A title and subtitle(標題或者子標題)。
  • One or more custom views(或多個視圖)。
  • *An action menu
    *(動作菜單)。

如何使用Toolbar?

Android Api中給我們提供了多個版本的Toolbar給我們使用,包括3.0引入的ActionBar和v21中的Toolbar,但是為了達到應用體驗的一致性以及如今紛繁復雜的android平臺差異化的情況下我們選擇__
android.support.v7.widget.Toolbar__的Toolbar來使用。

  • 添加android.support.v7.widget.Toolbar的依賴

    dependencies {
        compile 'com.android.support:appcompat-v7:25.3.1'
    }
    
  • 確保Activity繼承自AppCompatActivity:

    public class MyActivity extends AppCompatActivity {
    // ...
    }
    
  • 布局中添加如下代碼:

    <android.support.v7.widget.Toolbar
       android:id="@+id/my_toolbar"
       android:layout_width="match_parent"
       android:layout_height="?attr/actionBarSize"
       android:background="?attr/colorPrimary"
       android:elevation="4dp"
       android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
       app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>
    

Material Design 規范建議應用欄具有 4 dp 的elevation.

  • 在 Activity 的 onCreate()方法中,調用 Activity 的 setSupportActionBar()方法,然后傳遞 Activity 的工具欄。該方法會將工具欄設置為 Activity 的應用欄。例如:

     @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_my);
          Toolbar myToolbar = (Toolbar) findViewById(R.id.my_toolbar);
          setSupportActionBar(myToolbar);
       }
    

給Toolbar添加Action View & Action Providers

appbar_with_button.png

添加Action View

要添加Action View我們需要了解2個屬性:

  • actionViewClass:實現action widget的類

  • actionLayout:操作的布局
    舉個例子,把SearchView 組件添加到toolbar上

    <item android:id="@+id/action_search"
       android:title="@string/action_search"
       android:icon="@drawable/ic_search"
       app:showAsAction="ifRoom|collapseActionView"
       app:actionViewClass="android.support.v7.widget.SearchView" />
    

效果如下圖:


action_view.png

如果你需要配置這個action,在你的Activity的重寫方法onCreateOptionsMenu()。你可以通過 getActionView()
拿到view的引用。

   @Override
    public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main_activity_actions, menu);

    MenuItem searchItem = menu.findItem(R.id.action_search);
    SearchView searchView =(SearchView) MenuItemCompat.getActionView(searchItem);

    // Configure the search info and add any event listeners...
     return super.onCreateOptionsMenu(menu);
}

另外,如果想單獨處理當action展開或者收縮,你可以定義一個實現MenuItem.OnActionExpandListener接口的類,然后調用setOnActionExpandListener()。如下代碼所示:

    @Override
      public boolean onCreateOptionsMenu(Menu menu) {
      getMenuInflater().inflate(R.menu.options, menu);
      // ...

    // Define the listener
    OnActionExpandListener expandListener = new OnActionExpandListener() {
        @Override
    public boolean onMenuItemActionCollapse(MenuItem item) {
        // Do something when action item collapses
        return true;  // Return true to collapse action view
    }

    @Override
    public boolean onMenuItemActionExpand(MenuItem item) {
        // Do something when expanded
        return true;  // Return true to expand action view
        }
    };

        // Get the MenuItem for the action item
        MenuItem actionMenuItem = menu.findItem(R.id.myActionItem);

        // Assign the listener to that action item
        MenuItemCompat.setOnActionExpandListener(actionMenuItem, expandListener);

        // Any other things you have to do when creating the options menu…
        return true;
}

添加Action Provider

要添加一個Action Provider,首先在資源文件res/menu/下面添加資源文件,并添加actionProviderClass屬性,然后把actionProviderClass的名字填寫完整。
舉個例子,下面代碼是聲明了一個 ShareActionProvider,功能是能夠允許你的app分享數據到其他app:

<item android:id="@+id/action_share"
      android:title="@string/share"
      app:showAsAction="ifRoom"
      app:actionProviderClass="android.support.v7.widget.ShareActionProvider"/>

總結

Toolbar的android api支持的操作大概也就這些,具體詳細可以參考Toolbar官方的api文檔。下面我將在關于Toolbar你需要知道的各種sao姿勢(主題篇)中介紹如何管理Toolbar的樣式。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容