在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)方法。調用過程一般如下:
- Toolbar toolbar = (Toolbar)findViewById(R.id.mytoolbar);
- toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener(){
- public boolean onMenuItemClick(MenuItem item){
- return true;
- }
- });
- toolbar.inflateMenu(R.menu.your_toolbar_menu);
對於ToolBar的xml佈局,一般使用中,當作一個普通控件使用即可,佈局一般如下:
- <android.support.v7.widget.Toolbar
- android:layout_height="wrap_content"
- android:layout_width="match_parent"
- android:minHeight="?attr/actionBarSize"
- app:theme="@style/ThemeOverlay.AppCompat.ActionBar" />
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!
未完成