android的頂部操作欄

        在android中app往往需要一個頂部操作欄,實現的方式也可以有多種,常見的有直接在xml中添加控件當作頂部操作欄。又或者使用ActionBar。然而現在android的建議是使用ToolBar。

        ToolBar的使用結合了ActionBar和xml中添加控件的優勢,可視化直觀性比較好,操作性也比較好。使用ToolBar需要在theme中使用繼承自Base.ThemeOverlay.AppCompat的風格,例如:ThemeOverlay.AppCompat.ActionBar,這些風格可以直接使用在ToolBar控件中。這裏使用的是

Theme.AppCompat.Light.NoActionBar
的style,這個風格會禁止老舊的ActionBar,這種風格往往作爲Activity的風格,使用上不是很好。然後Activity需要繼承自AppCompatActivity,同時AppCompatActivity.setSupportActionBar(ToolBar)方法可以將ToolBar當作ActionBar進行操作。
    如果使用的是ActionBar,那麼Activity需要繼承ActionBarActivity,theme的style需要繼承Theme.holo或者其子類。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}
中,menu_main可以定義菜單項,
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}
則是菜單項點擊事件。
    注意,使用ActionBar兼容低版本需要導入support-appcompat-v7兼容包,然後ActionBarActivity中得到ActionBar返回使用的是個體SupportActionBar()方法,同時注意getSupportActionBar().getThemedContext()方法可以給ActionBar填充東西。ActionBar有許多可操作的地方,這裏不一一進行解釋。

    對於ToolBar,設置Theme的style爲Theme.AppCompat.Light.NoActionBar,繼承AppCompatActivity之後,有兩種做法:1.當作ActionBar使用,這個時候需要設置setSupportActionBar(ToolBar),然後系統會自動使用ActionBar的方法作爲ToolBar的方法,例如onCreateOptionsMenu,onOptionsItemSelected等。2.當作其他用途,一般就是當成控件使用,這個時候需要手動加載ToolBar,但是不用調用setSupportActionBar(ToolBar)方法。調用過程一般如下:
  1. Toolbar toolbar = (Toolbar)findViewById(R.id.mytoolbar);  
  2. toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener(){  
  3.     public boolean onMenuItemClick(MenuItem item){  
  4.         return true;  
  5.     }  
  6. });  
  7. toolbar.inflateMenu(R.menu.your_toolbar_menu);
這個過程就是給ToolBar加載item佈局,然後監聽item點擊事件。
    對於ToolBar的xml佈局,一般使用中,當作一個普通控件使用即可,佈局一般如下:
  1. <android.support.v7.widget.Toolbar    
  2.     android:layout_height="wrap_content"  
  3.     android:layout_width="match_parent"  
  4.     android:minHeight="?attr/actionBarSize"  
  5.     app:theme="@style/ThemeOverlay.AppCompat.ActionBar" />
但是如果需要實現一些Merterial Design的風格,則需要跟CoordinatorLayout,CollapsingToolBarLayout,AppBarLayout等配合使用,往往CoordinatorLayout作爲根佈局,然後CoordinatorLayout,CollapsingToolbarLayout,AppBarLayout基本上就是疊層擺放的。
    ToolBar的xml佈局中,一般設置app:theme和app:popupTheme風格,一般設置app:popupTheme="ThemeOverlay.AppCompat.Light",這個屬性是設置彈出窗口風格的。另外,對於ToolBar的高度,可以使用系統自身建議的高度使用屬性"?attr/actionBarSize"。

    注意,這個無論是ActionBar,還是ToolBar這些頂部操作欄,在MD(Meterial Design)之中,同意叫app bar了。



    最後講講一些細節。在ToolBar中,setNavigationIcon設置最左的圖標,同時這個設置需要在setSupportActionBar之後纔有作用,否則會出現back button。setLogo設置最左的第二個圖標,也就是Activity的logo,一般如果沒使用setNavigationIcon的話,setLogo的圖標會在最左。setTitle設置標題,setSubtitle副標題,副標題在標題之下。setOnMenuItemClickListener設置菜單項點擊監聽。最後注意,menu的item擺放是橫向擺放在ToolBar的右邊的,這點需要注意。同時menu的item項往往只設置最右邊的那個,也就是R.id.action_settings的item項,這個項點擊可以彈出下拉框。
    最後style的item項可以設置ToolBar的相關屬性,常見屬性有
colorPrimaryDark屬性設置的是最頂端的status bar狀態欄,也就是設置設置wifi,時間,電池的地方的背景顏色。
colorPrimary屬性設置的是ToolBar的背景顏色。
textColorPrimary設置的是ToolBar標題顏色。
navigationBarColor屬性設置的是底部導航欄的背景顏色,但是手機往往是沒有導航欄的,所以這個屬性不常用。
android:windowBackground設置的是主界面的顏色,當style作爲theme使用時這個設置比較很有用。
android:windowNoTitle可以設置是否需要標題欄。
windowActionBar設置是否需要ActionBar。

    另外,如果android版本不低於5.0的話,可以繼承anrdoid:Theme.Meterial風格,使用android:statusBarColor代替colorPrimaryDark。默認情況下,android:statusBarColor繼承自android:colorPrimaryDark。注意區分colorPrimaryDark與android:colorPrimaryDark!



ps:在將ToolBar作爲佈局控件使用時,需要注意,返回按鈕是一定要使用的,否則最左邊將會有部分的空間不能使用到,這點是需要特別注意的!

ps:需要在AndroidManifest中添加android:parentActivityName才能使navigationIcon的按鈕點擊返回上一個Activity!








未完成








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