1.Toolbar
?在記錄Toolbar之前需要介紹一下ActionBar瓜浸,每個(gè)活動最頂部的那個(gè)標(biāo)題欄就是ActionBar船侧,由于ActionBar的設(shè)計(jì)原因,被限定只能位于活動的頂部缔御,從而不能實(shí)現(xiàn)一些MaterialDesign的效果竟块。
?由于項(xiàng)目中的AndroidManifest文件中都默認(rèn)指定了AppTheme的主題,這個(gè)主題中自帶ActionBar≌爰ⅲ現(xiàn)在準(zhǔn)備使用Toolbar來替代ActionBar厂抽,需要指定一個(gè)不帶ActionBar的主題(Theme.AppCompat.NoActionBar)。
?接下來引入Toolbar控件丁眼,來替代ActionBar筷凤。
<android.support.v7.widget.Toolbar
高度設(shè)置為ActionBar的高度
android:layout_height="?attr/actionBarSize"
彈出Toolbar欄上彈出的菜單的主題
app:popupTheme="@style/ThemeOverlay.App.compat.Light"
/>
2.DrawerLayout----滑動菜單布局
?所謂滑動菜單就是將一些菜單選項(xiàng)隱藏起來,而不是放在主屏幕上苞七,然后通過滑動的方式將菜單顯示出來嵌施。
?DrawerLayout是一個(gè)布局,在布局中允許放入兩個(gè)直接子控件莽鸭,第一個(gè)子控件是主屏幕中顯示的內(nèi)容吗伤,第二個(gè)是滑動菜單中顯示的內(nèi)容。第二個(gè)子控件的android:layout_gravity屬性指定滑動方向硫眨,一般指定為start足淆。
3.NavigationView----導(dǎo)航頁面
?menu是用來在NavigationView中顯示具體的菜單項(xiàng)的,headerLayout則是用來在NavigationView中顯示頭部布局的礁阁。
<android.support.design.widget.NavigationView
app:menu="menu/nav_menu"
app:headerLayout="@layout/nav_header "/>
4.FloatingActionButton----懸浮按鈕
5.Snackbar
?Snackbar是更加先進(jìn)的提示工具巧号,它允許在提示當(dāng)中加入一個(gè)可交互按鈕,當(dāng)用戶點(diǎn)擊按鈕的時(shí)候可以執(zhí)行一些額外的邏輯操作(撤銷一些操作)姥闭。
Snackbar.make(view, "數(shù)據(jù)已刪除", Snackbar.LENGTH_SHORT)
//設(shè)置撤銷動作
.setAction("撤銷", new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "Data restored",
Toast.LENGTH_SHORT).show();
}
})
//設(shè)置回調(diào)
.setCallback(new Snackbar.Callback() {
@Override
public void onDismissed(Snackbar snackbar, int event) {
switch (event) {
case Snackbar.Callback.DISMISS_EVENT_CONSECUTIVE:
case Snackbar.Callback.DISMISS_EVENT_MANUAL:
case Snackbar.Callback.DISMISS_EVENT_SWIPE:
case Snackbar.Callback.DISMISS_EVENT_TIMEOUT:
doDelete();//執(zhí)行刪除操作
Toast.makeText(MainActivity.this, "刪除成功", Toast.LENGTH_SHORT).show();
break;
case Snackbar.Callback.DISMISS_EVENT_ACTION:
//與Action中的onClick重復(fù)
Toast.makeText(MainActivity.this, "撤銷了刪除操作", Toast.LENGTH_SHORT).show();
break;
}
}
@Override
public void onShown(Snackbar snackbar) {
super.onShown(snackbar);
Log.i(TAG, "onShown");
}
}) .show();
?調(diào)用Snackbar的make()方法來創(chuàng)建一個(gè)Snackbar對象丹鸿,make方法的第一個(gè)參數(shù)需要傳入一個(gè)View,這個(gè)View來自動查找最外層的布局棚品,用于展示Snackbar靠欢。第二個(gè)參數(shù)就是Snackbar中顯示的內(nèi)容,第三個(gè)參數(shù)就是顯示的時(shí)長铜跑。
6.CoordinatorLayout
?CoordinatorLayout可以說是一個(gè)加強(qiáng)版的FrameLayout门怪,可以監(jiān)聽其所有子控件的各種事件,然后自動做出最為合理的響應(yīng)锅纺。CoordinatorLayout監(jiān)聽到Snackbar的彈出事件(Snackbar.make傳入CoordinatorLayout的子控件)掷空,那么它會自動將內(nèi)部的FloatingActionButton向上偏移,從而保證不會被Snackbar擋住。