Toolbar使用

簡(jiǎn)介

Toolbar是Android 5.0中引入的一個(gè)新控件。好比是ActionBar升級(jí)版,但是相比ActionBar,Toolbar變得更加自由,可以放到任何位置。

使用

由于我們平常開(kāi)發(fā)app要兼容5.0以下的手機(jī),所以使用Toolbar必須引用appcompat-v7兼容包,Android studio新建的工程默認(rèn)是引用了appcompat-v7。

1.布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <android.support.v7.widget.Toolbar
        android:id="@+id/main_toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="@color/colorPrimary"/>
</RelativeLayout>

2.style樣式設(shè)置

使用Toolbar替代ActionBar,使用的主題必須是沒(méi)有ActionBar的,否則會(huì)造成沖突。因此修改style.xml中主題樣式,繼承Theme.AppCompat.NoActionBar

<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="android:windowBackground">@android:color/white</item>
</style>

3.Activity中使用

(1) 將Toolbar當(dāng)作ActionBar來(lái)使用。

這種情況一般發(fā)生在你想利用ActionBar現(xiàn)有的一些功能(比如能夠顯示菜單中的操作項(xiàng),響應(yīng)菜單點(diǎn)擊事件,使用ActionBarDrawerToggle等),但是又想獲得比actionbar更多的控制權(quán)限。

那么當(dāng)前Activity需要繼承AppCompatActivity,調(diào)用setSupportActionBar方法傳入Toolbar的實(shí)例對(duì)象。

public class MainActivity extends AppCompatActivity {
    @BindView(R.id.main_toolbar)
    Toolbar toolbar;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);

        setSupportActionBar(toolbar);
    }
}
(2) 將Toolbar當(dāng)作一個(gè)獨(dú)立的控件來(lái)使用。

這種情況當(dāng)前Activity可以不繼承AppCompatActivity。

public class MainActivity extends Activity {
    @BindView(R.id.main_toolbar)
    Toolbar toolbar;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);

        toolbar.setTitle("Example");
    }
}

以上步驟完成后,Toolbar就添加到了頁(yè)面中。

Toolbar效果

Toolbar配置

Toolbar在ActionBar原有的設(shè)計(jì)基礎(chǔ)上又將標(biāo)題欄分為了多個(gè)區(qū)域,如下從Google找到的一張示例圖所示:

配置

大抵來(lái)說(shuō),配置常用的幾個(gè)元素就如圖中所示:

(1) setNavigationIcon

設(shè)置導(dǎo)航按鈕,比如作為返回按鈕。
在Toolbar當(dāng)作ActionBar來(lái)使用的情況下:
注意setNavigationIcon需要放在 setSupportActionBar之后才會(huì)生效。

可以使用ActionBar原有方法來(lái)添加一個(gè)系統(tǒng)的返回按鈕。

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

可以通過(guò)setNavigationOnClickListener設(shè)置其點(diǎn)擊事件。

toolbar.setNavigationOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Toast.makeText(MainActivity.this, "toolbar", Toast.LENGTH_SHORT).show();
    }
});
返回按鈕
(2) setLogo

設(shè)置圖標(biāo)(圖中寫(xiě)錯(cuò)了,應(yīng)該是setLogo)

(3) setTitle

設(shè)置主標(biāo)題。
在Toolbar當(dāng)作ActionBar來(lái)使用的情況下:
setDisplayShowTitleEnabled需要設(shè)置為false,setTitle才能有效。

getSupportActionBar().setDisplayShowTitleEnabled(false);
(4) setSubtitle

設(shè)置副標(biāo)題

(5) setOnMenuItemClickListener

設(shè)置菜單的點(diǎn)擊事件,如果Toolbar當(dāng)作ActionBar來(lái)使用的話,還可以直接在onOptionsItemSelected(MenuItem item)中設(shè)置。

測(cè)試代碼如下:
toolbar.setNavigationIcon(R.mipmap.icon_back);
toolbar.setLogo(R.mipmap.ic_launcher);
toolbar.setTitle("Toolbar");
toolbar.setSubtitle("subtitle");
配置效果

總結(jié)

關(guān)于Toolbar的初步使用就這么多,在Toolbar當(dāng)作ActionBar使用的情況下,能用ActionBar原有方法實(shí)現(xiàn)的功能盡量用其方法實(shí)現(xiàn),不能實(shí)現(xiàn)的再考慮使用Toolbar的方法,舉個(gè)例子,像菜單構(gòu)建設(shè)置監(jiān)聽(tīng)什么的,直接使用Activity提供的方法就好了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容