一陷虎、快速使用
第一步:導(dǎo)包
compile 'com.android.support:design:25.1.0'
第二步:取消原有Actionbar,不然會報已有Actionbar的錯誤:
(1)自定義沒有Actionbar的風(fēng)格
<style name="AppTheme.noActionbar" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
(2)在AndroidManifest.xml中設(shè)置給Activity
<application
android:theme="@style/AppTheme.noActionbar"
...>
第三部:布局文件中添加Toolbar
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light">
</android.support.v7.widget.Toolbar>
第四步:在Activity中設(shè)置Toolbar
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
這樣就完成了自定義Toolbar的添加。
二贿条、Toolbar上的元素
標(biāo)題和子標(biāo)題(title and subtitle)
setTitle(String title)
setSubTitle(String title)
** 必須要在setSupportActionBar(toolbar)之前設(shè)置**Logo圖標(biāo)
setLogo(int resId)
組件 View
因為Toolbar繼承于ViewGroup本身是一個容器洪灯,可以添加View組件冬骚,可以在布局文件里面添加嘶窄√桥猓可以用于添加搜索欄(后續(xù)補(bǔ)充)-
Action Menu 設(shè)置菜單
1战虏、menu配置文件
在res/menu中增加menu的布局文件(如果沒有拣宰,新建)
<menu xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/action_ball"
android:title="籃球"
android:showAsAction="never"
tools:ignore="AppCompatResource"
android:orderInCategory="80"/>
<item .../>
其中:showAsAction屬性,
可選always(總是顯示)烦感、
never(不顯示)巡社、
ifRoom(有空間就顯示)2、設(shè)置關(guān)聯(lián) 在activity中重寫onCreateOptionMenu(Menu menu) @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.action_menu,menu); return true; 3手趣、重寫回調(diào)函數(shù) toolbar.setOnMenuItemClickListener( new Toolbar.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) {} );
Navigation Button 導(dǎo)航按鈕
使用DrawerLayout + NavigationView + Toolbar實現(xiàn)側(cè)滑導(dǎo)航欄
三晌该、DrawerLayout + NavigationView + Toolbar實現(xiàn)側(cè)滑導(dǎo)航欄
- 第一步:布局文件
一般整體布局文件如下:
<!--整體布局,最外層為DrawerLayout-->
<android.support.v4.widget.DrawerLayout...>
<!-- content部分绿渣,可以通過include添加內(nèi)容朝群,Toobar在activity_main中 -->
<include layout="@layout/activity_main"... />
<!-- navigationView部分 -->
<android.support.design.widget.NavigationView.../>
</android.support.v4.widget.DrawerLayout>
下面來看每個部分的屬性:
*** DrawerLayout部分 ***
<android.support.v4.widget.DrawerLayout
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:id="@+id/drawerLayout"
>
*** NavigationView部分 ***
<!--
1、layout_gravity屬性:必須設(shè)置中符,指明導(dǎo)航欄的位置潜圃;不指定的話,將全屏
2舟茶、app:menu屬性:必須設(shè)置谭期。 指明導(dǎo)航欄菜單布局文件(res/menu/下)堵第,格式如下:
<menu>
<group>
<item/>導(dǎo)航欄中的選項
...
</group>
</menu>
3、app:headerLayout屬性:可選隧出。指明布局文件踏志,一般為導(dǎo)航欄添加頭像和說明
-->
<android.support.design.widget.NavigationView
android:id="@+id/navigationView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="start"
app:menu="@menu/navigation_menu"
app:headerLayout="@layout/header_layout">
</android.support.design.widget.NavigationView>
- 第二步:activity中構(gòu)建組件并設(shè)置監(jiān)聽
//Toolbar組件
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
//抽屜布局組件
DrawerLayout drawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout);
//構(gòu)建對應(yīng)的拖拽監(jiān)聽,5個參數(shù):上下文胀瞪、DrawerLayout针余、Toolbar、open字符串凄诞、close字符串
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this,drawerLayout,toolbar,R.string.open,R.string.close);
//綁定監(jiān)聽
drawerLayout.addDrawerListener(toggle);
toggle.syncState();
- 第三步:導(dǎo)航欄點(diǎn)擊圆雁、關(guān)閉事件監(jiān)聽和回調(diào)函數(shù)
為NavigationView的Menu添加監(jiān)聽
//設(shè)置監(jiān)聽
setNavigationItemSelectedListener(NavigationView.OnNavigationItemSelectedListener())
//重寫回調(diào)方法
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
drawerLayout.closeDrawer(GravityCompat.START);//關(guān)閉導(dǎo)航欄
//其他時間響應(yīng)操作
return false;
}
//通過onBackPressed()來關(guān)閉
if(drawerLayout.isDrawerOpen(GravityCompat.START)) {
drawerLayout.closeDrawer(GravityCompat.START);
}else{
super.onBackPressed();
}
為HeaderView添加監(jiān)聽
使用mNavigationView.getHeaderView(0);
獲取對象,再單獨(dú)添加監(jiān)聽