不需要跳出activity的菜单侧滑和fragment的嵌套
直接按步骤上代码:
activity_main的代码:
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<FrameLayout
android:id="@+id/fragment_layout"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<ListView
android:id="@+id/left_drawer"
android:layout_width="200dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="#f3343942"
android:choiceMode="singleChoice"
android:divider="#ff666666"
android:dividerHeight="1dp" />
</android.support.v4.widget.DrawerLayout>
MainActivity的代码:
/** DrawerLayout */
private DrawerLayout mDrawerLayout;
/** 左边栏菜单 */
private ListView mMenuListView;
/** Material Design风格 */
private MaterialMenuIcon mMaterialMenuIcon;
/** 菜单打开/关闭状态 */
private boolean isDirection_left = false;
private View showView;
private long exitTime = 0;
/**
* fragment管理器
*/
FragmentManager manager;
FragmentTransaction transaction;
ViewPageFragment viewPageFragment;
Fragment1 fragment1;
Fragment2 fragment2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mMenuListView = (ListView) findViewById(R.id.left_drawer);
this.showView = mMenuListView;
// 初始化菜单列表
mMenuListView.setAdapter(new IconListAdapter(getApplicationContext(), getListData()));
mMenuListView.setOnItemClickListener(new DrawerItemClickListener());
// 设置抽屉打开时,主要内容区被自定义阴影覆盖
mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START);
// 设置ActionBar可见,并且切换菜单和内容视图
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setHomeButtonEnabled(true);
mMaterialMenuIcon = new MaterialMenuIcon(this, Color.WHITE, Stroke.THIN);
mDrawerLayout.setDrawerListener(new DrawerLayoutStateListener());
manager = getSupportFragmentManager();
transaction = manager.beginTransaction();
viewPageFragment = new ViewPageFragment();
fragment1 = new Fragment1();
fragment2 = new Fragment2()
addFragment(viewPageFragment, "ViewPageFragment");
if (savedInstanceState == null) {
selectItem(0);
}
}
// 初始化数据
private List<IconListItem> getListData() {
List<IconListItem> listItems = new ArrayList<IconListItem>();
IconListItem item0 = new IconListItem("Home", R.drawable.home_icon);
IconListItem item1 = new IconListItem("First", R.drawable.first_icon);
IconListItem item2 = new IconListItem("Second", R.drawable.second_icon);
listItems.add(item0);
listItems.add(item1);
listItems.add(item2);
return listItems;
}
class IconListAdapter extends ArrayAdapter<IconListItem> {
protected LayoutInflater mInflater;
private static final int mLayout = R.layout.item_left_menu_list;
public IconListAdapter(Context context, List<IconListItem> items) {
super(context, mLayout, items);
mInflater = LayoutInflater.from(getApplicationContext());
}
public View getView(int position, View convertView, ViewGroup parent) {
TextView textView;
ImageView imageView;
View view;
if (convertView == null) {
view = mInflater.inflate(mLayout, null);
} else {
view = convertView;
}
textView = (TextView) view.findViewById(R.id.tv_left_menu_content);
textView.setText(getItem(position).getTitle());
imageView = (ImageView) view.findViewById(R.id.iv_left_menu_image);
imageView.setImageResource(getItem(position).getResource());
return view;
}
}
/**
* ListView上的Item点击事件
*
*/
private class DrawerItemClickListener implements ListView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
selectItem(position);
}
}
/**
* DrawerLayout状态变化监听
*/
private class DrawerLayoutStateListener extends DrawerLayout.SimpleDrawerListener {
/**
* 当导航菜单滑动的时候被执行
*/
@Override
public void onDrawerSlide(View drawerView, float slideOffset) {
showView = drawerView;
if (drawerView == mMenuListView) {// 根据isDirection_left决定执行动画
mMaterialMenuIcon.setTransformationOffset(MaterialMenuDrawable.AnimationState.BURGER_ARROW,
isDirection_left ? 2 - slideOffset : slideOffset);
}
}
/**
* 当导航菜单打开时执行
*/
@Override
public void onDrawerOpened(android.view.View drawerView) {
if (drawerView == mMenuListView) {
isDirection_left = true;
}
}
/**
* 当导航菜单关闭时执行
*/
@Override
public void onDrawerClosed(android.view.View drawerView) {
if (drawerView == mMenuListView) {
isDirection_left = false;
}
}
}
/**
* 切换主视图区域的Fragment
*
* @param position
*/
private void selectItem(int position) {
switch (position) {
case 0:
replaceFragment(viewPageFragment);
break;
case 1:
replaceFragment(fragment1);
break;
case 2:
replaceFragment(fragment2);
break;
default:
break;
}
// 更新选择后的item和title,然后关闭菜单
mMenuListView.setItemChecked(position, true);
setTitle(getListData().get(position).getTitle());
mDrawerLayout.closeDrawer(mMenuListView);
}
private void addFragment(Fragment fragment, String tag) {
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.add(R.id.fragment_layout, fragment, tag);
transaction.commit();
}
private void replaceFragment(Fragment fragment) {
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(R.id.fragment_layout, fragment);
transaction.commit();
}
/**
* 点击ActionBar上菜单
*/
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id) {
case android.R.id.home:
if (showView == mMenuListView) {
if (!isDirection_left) { // 左边栏菜单关闭时,打开
mDrawerLayout.openDrawer(mMenuListView);
} else {// 左边栏菜单打开时,关闭
mDrawerLayout.closeDrawer(mMenuListView);
}
}
break;
default:
break;
}
return super.onOptionsItemSelected(item);
}
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
mMaterialMenuIcon.syncState(savedInstanceState);
}
@Override
protected void onSaveInstanceState(Bundle outState) {
mMaterialMenuIcon.onSaveInstanceState(outState);
super.onSaveInstanceState(outState);
}
/**
* 加载菜单
*/
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) {
if ((System.currentTimeMillis() - exitTime) > 2000) {
Toast.makeText(this, getResources().getString(R.string.press_more_then_exit), Toast.LENGTH_SHORT)
.show();
exitTime = System.currentTimeMillis();
} else {
finish();
System.exit(0);
}
return true;
}
return super.onKeyDown(keyCode, event);
}
}
博主第一次写博客,将核心的代码呈现出来以便开发当中遇到和我一样的问题的童鞋不再头疼。以后定当努力呈现更加全面、具体、有技术含量的代码和大家分享。时间不早了,下班了。