首先來了解以下什麼是ActionBarDrawerToggle,說起ActionBarDrawerToggle,必須還要提起一個控件--DrawerLayout。
那DrawerLayout又是什麼呢?看下圖所示:
如圖所示,當手指從屏幕左側向右滑動時,會有一個Layout佈局從左側滑出,DrawerLayout就是一個實現這個功能的UI控件,但是用腳後跟想一下也能猜到,對於DrawerLayout應該有個事件的監聽,比如但佈局完成滑出、佈局隱藏或者佈局正在滑動的時候都會有一個回調的監聽事件,而ActionBarDrawerToggle就是DrawerLayout事件的監聽器。
ActionBarDrawerToggle有3個方法可以被複寫,分別用來實現DrawerLayout打開,關閉,滑動的事件監聽:
onDrawerOpened DrawerLayout滑出時調用
onDrawerClosed DrawerLayout關閉時調用
onDrawerSlide DrawerLayout滑動時調用
接下來看下代碼中如何使用ActionBarDrawerToggle:
DrawerLayout drawerLayout = (DrawerLayout)findViewById(R.id.drawerLayout);
ActionBarDrawerToggle mDrawerToggle = new ActionBarDrawerToggle(getActivity(),
drawerLayout, toolBar, R.string.drawer_open, R.string.drawer_close){
@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
if (!mUserLearnedDrawer && !mFromSavedInstanceState) {
mUserLearnedDrawer = true;
saveToPreferences(getActivity(), KEY_USER_LEARNED_DWARER, mUserLearnedDrawer + "");
}
getActivity().invalidateOptionsMenu();
}
@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
getActivity().invalidateOptionsMenu();
}
@Override
public void onDrawerSlide(View drawerView, float slideOffset) {
if (slideOffset < 0.6) {
toolBar.setAlpha(1 - slideOffset);
}
}
};