Android-menudrawer-master开源强大侧栏菜单

移动开发
Android上的菜单展示风格各异,其中用得最多且体验最好的莫过于左右滑动来显示隐藏的菜单,android-menudrawer 是一个滑动 式菜单实现,允许用户在应用当中实现无缝导航。该项目具有多种菜单展示效果,其中最常见的就是通过屏幕边缘拖动或点击动作栏的“向上”按钮显示。

源码简介

Android上的菜单展示风格各异,其中用得最多且体验***的莫过于左右滑动来显示隐藏的菜单,android-menudrawer 是一个滑动 式菜单实现,允许用户在应用当中实现无缝导航。该项目具有多种菜单展示效果,其中最常见的就是通过屏幕边缘拖动或点击动作栏的“向上”按钮显示。

源码运行截图

源码片段

  1. package net.simonvt.menudrawer.samples; 
  2.   
  3. import net.simonvt.menudrawer.MenuDrawer; 
  4. import net.simonvt.menudrawer.Position; 
  5.   
  6. import android.os.Build; 
  7. import android.os.Bundle; 
  8. import android.support.v4.app.Fragment; 
  9. import android.support.v4.app.FragmentManager; 
  10. import android.support.v4.app.FragmentTransaction; 
  11. import android.view.LayoutInflater; 
  12. import android.view.View; 
  13. import android.view.ViewGroup; 
  14. import android.widget.TextView; 
  15.   
  16. public class FragmentSample extends BaseListSample { 
  17.   
  18.     private static final String STATE_CURRENT_FRAGMENT = "net.simonvt.menudrawer.samples.FragmentSample"
  19.   
  20.     private FragmentManager mFragmentManager; 
  21.     private FragmentTransaction mFragmentTransaction; 
  22.   
  23.     private String mCurrentFragmentTag; 
  24.   
  25.     @Override 
  26.     protected void onCreate(Bundle inState) { 
  27.         super.onCreate(inState); 
  28.   
  29.         mFragmentManager = getSupportFragmentManager(); 
  30.   
  31.         if (inState != null) { 
  32.             mCurrentFragmentTag = inState.getString(STATE_CURRENT_FRAGMENT); 
  33.         } else { 
  34.             mCurrentFragmentTag = ((Item) mAdapter.getItem(0)).mTitle; 
  35.             attachFragment(mMenuDrawer.getContentContainer().getId(), getFragment(mCurrentFragmentTag), 
  36.                     mCurrentFragmentTag); 
  37.             commitTransactions(); 
  38.         } 
  39.   
  40.         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { 
  41.             getActionBar().setDisplayHomeAsUpEnabled(true); 
  42.         } 
  43.   
  44.         mMenuDrawer.setOnDrawerStateChangeListener(new MenuDrawer.OnDrawerStateChangeListener() { 
  45.             @Override 
  46.             public void onDrawerStateChange(int oldState, int newState) { 
  47.                 if (newState == MenuDrawer.STATE_CLOSED) { 
  48.                     commitTransactions(); 
  49.                 } 
  50.             } 
  51.   
  52.             @Override 
  53.             public void onDrawerSlide(float openRatio, int offsetPixels) { 
  54.                 // Do nothing 
  55.             } 
  56.         }); 
  57.     } 
  58.   
  59.     @Override 
  60.     protected void onSaveInstanceState(Bundle outState) { 
  61.         super.onSaveInstanceState(outState); 
  62.         outState.putString(STATE_CURRENT_FRAGMENT, mCurrentFragmentTag); 
  63.     } 
  64.   
  65.     @Override 
  66.     protected void onMenuItemClicked(int position, Item item) { 
  67.         if (mCurrentFragmentTag != null) detachFragment(getFragment(mCurrentFragmentTag)); 
  68.         attachFragment(mMenuDrawer.getContentContainer().getId(), getFragment(item.mTitle), item.mTitle); 
  69.         mCurrentFragmentTag = item.mTitle; 
  70.         mMenuDrawer.closeMenu(); 
  71.     } 
  72.   
  73.     @Override 
  74.     protected int getDragMode() { 
  75.         return MenuDrawer.MENU_DRAG_WINDOW; 
  76.     } 
  77.   
  78.     @Override 
  79.     protected Position getDrawerPosition() { 
  80.         return Position.LEFT; 
  81.     } 
  82.   
  83.     protected FragmentTransaction ensureTransaction() { 
  84.         if (mFragmentTransaction == null) { 
  85.             mFragmentTransaction = mFragmentManager.beginTransaction(); 
  86.             mFragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); 
  87.         } 
  88.   
  89.         return mFragmentTransaction; 
  90.     } 
  91.   
  92.     private Fragment getFragment(String tag) { 
  93.         Fragment f = mFragmentManager.findFragmentByTag(tag); 
  94.   
  95.         if (f == null) { 
  96.             f = SampleFragment.newInstance(tag); 
  97.         } 
  98.   
  99.         return f; 
  100.     } 
  101.   
  102.     protected void attachFragment(int layout, Fragment f, String tag) { 
  103.         if (f != null) { 
  104.             if (f.isDetached()) { 
  105.                 ensureTransaction(); 
  106.                 mFragmentTransaction.attach(f); 
  107.             } else if (!f.isAdded()) { 
  108.                 ensureTransaction(); 
  109.                 mFragmentTransaction.add(layout, f, tag); 
  110.             } 
  111.         } 
  112.     } 
  113.   
  114.     protected void detachFragment(Fragment f) { 
  115.         if (f != null && !f.isDetached()) { 
  116.             ensureTransaction(); 
  117.             mFragmentTransaction.detach(f); 
  118.         } 
  119.     } 
  120.   
  121.     protected void commitTransactions() { 
  122.         if (mFragmentTransaction != null && !mFragmentTransaction.isEmpty()) { 
  123.             mFragmentTransaction.commit(); 
  124.             mFragmentTransaction = null
  125.         } 
  126.     } 
  127.   
  128.     public static class SampleFragment extends Fragment { 
  129.   
  130.         private static final String ARG_TEXT = "net.simonvt.menudrawer.samples.SampleFragment.text"
  131.   
  132.         public static SampleFragment newInstance(String text) { 
  133.             SampleFragment f = new SampleFragment(); 
  134.   
  135.             Bundle args = new Bundle(); 
  136.             args.putString(ARG_TEXT, text); 
  137.             f.setArguments(args); 
  138.   
  139.             return f; 
  140.         } 
  141.   
  142.         @Override 
  143.         public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
  144.             View v = inflater.inflate(R.layout.fragment_sample, container, false); 
  145.   
  146.             ((TextView) v.findViewById(R.id.text)).setText(getArguments().getString(ARG_TEXT)); 
  147.   
  148.             return v; 
  149.         } 
  150.     } 

源码链接:http://down.51cto.com/data/1968347

责任编辑:chenqingxiang 来源: 网络整理
相关推荐

2015-07-20 15:14:19

侧滑菜单功能多样

2014-12-15 09:53:55

Android侧滑菜单SlidingMenu

2021-04-15 17:47:38

鸿蒙HarmonyOS应用

2021-11-24 10:02:53

鸿蒙HarmonyOS应用

2013-01-14 17:05:55

UCUI设计菜单栏

2011-06-30 17:01:43

Qt Creator 菜单栏

2021-05-12 10:06:43

开源技术 软件

2010-01-27 10:21:00

Android菜单

2022-10-10 10:14:38

Python绘图库

2010-03-04 16:03:43

Android服务

2024-02-22 16:19:20

2010-03-04 09:01:12

Windows 7隐藏开始菜单

2009-09-24 08:31:22

Windows 7菜单栏管理

2013-06-08 12:49:03

Android开发XML定义菜单

2013-03-28 11:32:07

微信菜单轻App

2017-05-14 15:42:45

Opera 45浏览器侧边栏

2019-05-07 14:42:03

深度学习编程人工智能

2020-09-29 16:49:41

开源密码管理器互联网

2020-11-15 18:20:44

GnuCash开源会计软

2016-02-15 11:44:23

源码开源项目watch
点赞
收藏

51CTO技术栈公众号