標(biāo)簽(空格分隔): android
運(yùn)行效果:

Screenshot_1479713978.png
一、四個需要注意的地方:
-
我們在使用Toolbar時候隱藏系統(tǒng)原來的導(dǎo)航欄,
- 一種是給Activity設(shè)置一個NoActionBar的Theme。
- 一種是在繼承AppCompatActivity中調(diào)用supportRequestWindowFeature(Window.FEATURE_NO_TITLE)
(注意:BaseActivity是繼承了AppCompatActivity的,如果繼承Activity的requestWindowFeature(Window.FEATURE_NO_TITLE)).
如果你想在代碼修改標(biāo)題和子標(biāo)題的字體大小、顏色等,可以調(diào)用setTitleTextColor、setTextAppearance、setSubtitleTextColor、setSubtitleTextAppearance這些API;
自定義的View位于title、subtitle和actionmenu之間,這意味著,如果title和subtitle都在,且actionmenu選項(xiàng)太多的時候,留給自定義View的空間就越小
-
Toolbar和其他控件一樣,很多屬性設(shè)置方法即支持代碼設(shè)置,也支持xml設(shè)置。
常見屬性設(shè)置: toolbar:navigationIcon="@mipmap/ic_drawer_home" toolbar:logo="@mipmap/ic_launcher" toolbar:subtitle="456" toolbar:title="123">(注意:xml設(shè)置是注意設(shè)置命名空間xmlns:toolbar="http://schemas.android.com/apk/res-auto")
二、Toolbar基礎(chǔ)使用:
2.1 風(fēng)格(sytle)
2.2 界面(layout)
2.3 程序(java)
2.1 風(fēng)格(sytle)
為了之后設(shè)定方便,我們現(xiàn)在res/values/styles.xml里增加一個名為AppTheme.Base 的風(fēng)格
styles(系統(tǒng)默認(rèn)調(diào)用的style)
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="AppTheme.Base">
</style>
<!--AppTheme.Base-->
<style name="AppTheme.Base" parent="Theme.AppCompat.Light.DarkActionBar">
<!--隱藏原來的Actionbar和標(biāo)題-->
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<!-- Customize your theme here. 設(shè)置Theme顏色-->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">#0176DA</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
</resources>
styles(v19)
適配Android4.4狀態(tài)欄
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="AppTheme.Base">
<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowTranslucentNavigation">true</item>
</style>
</resources>
styles(v21)
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="AppTheme.Base"></style>
</resources>
2.2 界面(layout)
注意在跟布局使用android:fitSystemWindows="true",不然actionbar會和狀態(tài)欄重合
res/layout/layout_main 布局文件:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:background="@color/color_0176da"
tools:context="com.aqtc.toolbardemo.MainActivity">
<android.support.v7.widget.Toolbar xmlns:toolbar="http://schemas.android.com/apk/res-auto"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/color_0176da"
toolbar:navigationIcon="@mipmap/ic_launcher"
toolbar:title="ToolbarDemo"
toolbar:titleTextColor="#FFF" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/toolbar"
android:background="@android:color/white">
</RelativeLayout>
</RelativeLayout>
menu布局文件res/menu/menu_main:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@id/action_search"
android:icon="@mipmap/ic_search"
android:title="@string/menu_search"
app:showAsAction="ifRoom" />
<item
android:id="@id/action_notification"
android:icon="@mipmap/ic_notifications"
android:title="@string/menu_notifications"
app:showAsAction="ifRoom" />
<item
android:id="@+id/action_item1"
android:title="@string/item_01"
app:showAsAction="never" />
<item
android:id="@+id/action_item2"
android:title="@string/item_02"
app:showAsAction="never" />
</menu>
app:showAsAction=" " 這個屬性可接受的值有:
- always:使菜單項(xiàng)一直顯示在ToolBar上。
- ifRoom:如果有足夠的空間,這個值會使菜單項(xiàng)顯示在ToolBar上。
- never:使菜單項(xiàng)永遠(yuǎn)都不出現(xiàn)在ToolBar上,在…(豎)的子項(xiàng)中顯示
- withText:使菜單項(xiàng)和它的圖標(biāo),菜單文本一起顯示。
2.3 代碼(activity)
2.3.1 直接通過toolbar加載menu布局文件
public class MainActivity extends AppCompatActivity {
private Toolbar toolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
toolbar= (Toolbar) findViewById(R.id.toolbar);
// setSupportActionBar(toolbar);
toolbar.inflateMenu(R.menu.base_toolbar_menu);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(MainActivity.this,"navigation",Toast.LENGTH_SHORT).show();
}
});
toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()){
case R.id.action_item1:
Toast.makeText(MainActivity.this,"action_item1",Toast.LENGTH_SHORT).show();
break;
case R.id.action_item2:
Toast.makeText(MainActivity.this,"action_item2",Toast.LENGTH_SHORT).show();
break;
case R.id.action_notification:
Toast.makeText(MainActivity.this,"action_notification",Toast.LENGTH_SHORT).show();
break;
case R.id.action_search:
Toast.makeText(MainActivity.this,"action_search",Toast.LENGTH_SHORT).show();
break;
}
return false;
}
});
}
}
2.3.2 將Toolbar轉(zhuǎn)換成ActionBar加載布局文件
@Override
protected void onCreate(Bundle savedInstanceState) {
....
setSupportActionBar(mToolbar);
ActionBar mActionBar = this.getSupportActionBar();
if (mActionBar != null) {
//設(shè)置返回事件
mActionBar.setDisplayHomeAsUpEnabled(true);
}
....
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
this.getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
super.onOptionsItemSelected(item);
switch (item.getItemId()) {
case R.id.action_item1:
Toast.makeText(MainActivity.this,"action_item1",Toast.LENGTH_SHORT).show();
break;
case R.id.action_item2:
Toast.makeText(MainActivity.this,"action_item2",Toast.LENGTH_SHORT).show();
break;
case R.id.action_notification:
Toast.makeText(MainActivity.this,"action_notification",Toast.LENGTH_SHORT).show();
break;
case R.id.action_search:
Toast.makeText(MainActivity.this,"action_search",Toast.LENGTH_SHORT).show();
break;
}
return true;
}
....