ToolBar介紹
ToolBar是Android5.0引入刁绒,可使用support v7兼容包開發(fā)。Android開發(fā)中逐漸使用ToolBar替換掉ActionBar龙填。
ToolBar常用設(shè)置項
- toolbar:navigationIcon
左側(cè)圖標(biāo)封断,默認(rèn)是一個Back箭頭 - toolbar:logo
app圖標(biāo)而昨,展示位置和navigationIcon差不多,一般用navigationIcon - toolbar:subtitle
副標(biāo)題 - toolbar:title
標(biāo)題
注:命名空間一定要用toolbar惭婿,不要用android命名空間不恭。sdk bug,用android命名空間财饥,設(shè)置不生效换吧。
項目開發(fā)
由于項目開發(fā)過程中,對toolbar的自定義程度比較高钥星,所有沒有采用toolbar自帶的幾個屬性沾瓦,而是采用在xml文件ToolBar標(biāo)簽包裹自定義布局的方式引入。
1)在layout布局文件中引入ToolBar
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
style="@style/ToolbarStyle"
app:theme="?attr/actionBarTheme">
<include layout="@layout/toolbar_web"/>
</android.support.v7.widget.Toolbar>
<WebView
android:id="@+id/webview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/toolbar"/>
</RelativeLayout>
代碼中谦炒,Toolbar標(biāo)簽內(nèi)包裹了實際的布局文件贯莺,此處使用include標(biāo)簽,保證代碼的整潔性宁改。
toolbar_web.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/app_brand_color"
android:orientation="horizontal">
<LinearLayout
android:id="@+id/toolbar_back"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginRight="60dp"
android:layout_alignParentLeft="true"
android:background="@drawable/btn_white_hover"
android:gravity="center_vertical"
android:orientation="horizontal"
>
<ImageView
android:layout_width="16dp"
android:layout_height="16dp"
android:layout_marginLeft="14dp"
android:layout_marginRight="14dp"
android:src="@drawable/toolbar_back"
/>
<TextView
android:id="@+id/toolbar_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="4dp"
android:paddingRight="4dp"
android:singleLine="true"
android:textColor="#ffffff"
android:textSize="20sp"
/>
</LinearLayout>
<LinearLayout
android:id="@+id/toolbar_share"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentRight="true"
android:layout_marginRight="20dp"
android:background="@drawable/btn_white_hover"
android:gravity="center_vertical"
android:orientation="horizontal"
>
<ImageView
android:layout_width="16dp"
android:layout_height="16dp"
android:scaleType="centerCrop"
android:src="@drawable/web_share_ic"
/>
</LinearLayout>
</RelativeLayout>
項目中以toolbar_xxx.xml的命名方法統(tǒng)一定義toolbar內(nèi)部的布局文件缕探,布局文件內(nèi)部toolbar_back,toolbar_title采用統(tǒng)一的命名方法还蹲,以便于項目管理爹耗。
2)代碼中使用ToolBar
- 在BaseActivity中用toolbar替換默認(rèn)的actionbar
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); int layoutId = getLayoutId(); if (layoutId != -1) { setContentView(layoutId); } Injector.inject(this,this); mContext = this; readIntent(); if (findViewById(R.id.toolbar) != null){ toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(false); getSupportActionBar().setDisplayShowTitleEnabled(false); } initControls(savedInstanceState); setListeners(); overridePendingTransition(R.anim.left_in, R.anim.hold); }
這里必須要設(shè)置setDisplayHomeAsUpEnabled為false耙考,否則就算沒有設(shè)置navigationIcon,也會莫名其妙的出現(xiàn)默認(rèn)的Icon~~
2)在實際的activity中潭兽,找到對應(yīng)的View實例
3)ToolBar相關(guān)view的響應(yīng)事件
@Override
protected void setListeners() {
toolbarBack.setOnClickListener(this);
toolbarSend.setOnClickListener(this);
listView.setOnItemClickListener(itemClickListener);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.toolbar_back:
finish();
break;
case R.id.toolbar_send:
int position = listView.getCheckedItemPosition();
if(position < 0){
ToastUtils.showToast("請選擇一個分?jǐn)?shù)");
return;
}
break;
}
}