利用 v7 Toolbar 自定義 Android ActionBar



要使用 Toolbar,首先要在 layout 裏面添加組件,例如在 activity_main.xml 裏添加java

<android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_height="wrap_content"
        android:layout_width="match_parent" />

而後修改該 Activity 的樣式,禁用其 ActionBar
android

<style name="AppTheme.NoActionBar">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
</style>

最後再 Activity 代碼中設置該 Toolbar 爲 ActionBarapp

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

至此,一個簡單的自定義 ActionBar 就完成了。ide


若是想 修改導航按鈕 的圖標,只須要在 Layout 文件中爲 Toolbar 增長屬性 app:navigationIcon 便可ui

<android.support.v7.widget.Toolbar
        android:id="@+id/id_toolbar"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        app:navigationIcon="@mipmap/back_icon" />

注意:若是要在代碼裏設置 icon 屬性,須要在 setSupportActionBar() 方法以後執行,不然修改無效code

爲導航按鈕添加點擊處理xml

toolbar.setNavigationOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // TODO
        }
});


若是想 修改標題樣式,如改爲居中,須要清空默認標題,並添加自定義標題。ip

首先,在 layout 文件中 增長 TextView 用於顯示文字內容,以下get

<android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:minHeight="?attr/actionBarSize"
        app:navigationIcon="@mipmap/back_icon">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:layout_gravity="center"
            android:text="tonglei0429"
            android:textSize="18dp" />

</android.support.v7.widget.Toolbar>

而後,清空原 toolbar 標題string

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setTitle("");
setSupportActionBar(toolbar);



若是想修改右側菜單項,能夠修改 menu.xml 同 ActionBar 處理方式同樣,如 menu.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context="com.narennetwork.travel.ui.ToursActivity">
    <item
        android:id="@+id/action_add"
        android:orderInCategory="100"
        android:title="@string/action_add"
        android:icon="@mipmap/add_icon"
        app:showAsAction="always" />
</menu>

app:showAsAction 屬性決定該菜單項在合適被合併到 overflow (...) 裏,always表明始終顯示,never表明始終合併,ifRoom表明根據屏幕空間自動調整

android:orderInCategory 表明其優先級,即收入 Overflow 裏的順序

爲菜單項添加點擊處理

@Override
public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_tour_publisher, menu);
        return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
        if (item.getItemId() == R.id.action_add) {
            // TODO
        }

        return super.onOptionsItemSelected(item);
}
相關文章
相關標籤/搜索