代码下载详见
SlidingMenu+ViewPager冲突解决
http://download.youkuaiyun.com/detail/zhiyuan0932/9501092
SlidingMenu简单配置
http://download.youkuaiyun.com/detail/zhiyuan0932/9500675
下载libary
导包
- 将所下载的libary包导入到项目中(该地址下的工具包支持Eclipse)
创建自己的项目
- 在这提供两种方式来使用SlidingMenu
- 第一种写法—直接实例化SlidingMenu,逻辑一般实现在activity中
<code class="language-bash hljs has-numbering"> private void <span class="hljs-function"><span class="hljs-title">initSlidingMenu</span></span>() { // 初始化SlidingMenu对象 SlidingMenu menu = new SlidingMenu(this); // 设置侧滑方式为左侧侧滑 menu.setMode(SlidingMenu.LEFT); /* * 设置拖拽模式 SlidingMenu.TOUCHMODE_FULLSCREEN全屏触摸有效 * SlidingMenu.TOUCHMODE_MARGIN 拖拽边缘有效 SlidingMenu.TOUCHMODE_NONE * 不响应触摸事件 */ menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN); // 设置阴影的宽度 menu.setShadowWidthRes(R.dimen.shadow_width); // 设置阴影的图片 menu.setShadowDrawable(R.drawable.shadow); // 设置sldingMenu的剩余大小---=内容显示页对应的dp大小 menu.setBehindOffsetRes(R.dimen.slidingmenu_offset); // 设置滑动时的渐变程度 menu.setFadeDegree(<span class="hljs-number">0.35</span>f); // 使SlidingMenu附加在Activity右边 // SlidingMenu.SLIDING_CONTENT 将侧滑栏设置为在内容位置 // SlidingMenu.SLIDING_WINDOW 将侧滑栏设置为在整个窗口呈现 menu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT); // 设置SlidingMenu关联的布局 menu.setMenu(R.layout.menu); // 在SlidingMenu关联布局中查询控件 TextView tv_test = (TextView) menu.findViewById(R.id.tv_test); // 简单设置SlidingMenu界面显示内容 tv_test.setText(<span class="hljs-string">"haha"</span>); }</code>
- 相关联的dimen配置
<code class="hljs xml has-numbering"><span class="hljs-tag"><<span class="hljs-title">resources</span>></span> <span class="hljs-tag"><<span class="hljs-title">dimen</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"shadow_width"</span>></span>16dp<span class="hljs-tag"></<span class="hljs-title">dimen</span>></span> <span class="hljs-tag"><<span class="hljs-title">dimen</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"slidingmenu_offset"</span>></span>160dp<span class="hljs-tag"></<span class="hljs-title">dimen</span>></span> <span class="hljs-tag"></<span class="hljs-title">resources</span>></span></code>
-
第二种写法—让类继承SlidingFragmentActivity或其他Sliding类型的Activity
这种写法可以单独将SlidingMenu要展示的内容抽取出来,放到某一个Fragment中去处理
- 代码演示
<code class="language-bash hljs has-numbering">public class MainActivity extends SlidingFragmentActivity { private SlidingMenu slidingMenu; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); // 内容页布局 <span class="hljs-keyword">set</span>ContentView(R.layout.activity_main); // 设置侧拉条目布局 <span class="hljs-keyword">set</span>BehindContentView(R.layout.menu_frame); // 获取侧拉栏目对象 slidingMenu = getSlidingMenu(); /* * SlidingMenu.TOUCHMODE_FULLSCREEN全屏触摸有效 SlidingMenu.TOUCHMODE_MARGIN * 拖拽边缘有效 SlidingMenu.TOUCHMODE_NONE 不响应触摸事件 */ slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN); // 设置内容显示页对应的dp大小 slidingMenu.setBehindOffsetRes(R.dimen.slidingmenu_offset); // //设置左侧侧拉栏目宽度 // slidingMenu.setBehindWidth(<span class="hljs-number">140</span>); // 设置侧拉栏目所在位置 /* * SlidingMenu.LEFT SlidingMenu.LEFT_RIGHT SlidingMenu.RIGHT */ slidingMenu.setMode(SlidingMenu.LEFT); // 给侧拉栏目和左侧内容页区分开(加线) slidingMenu.setShadowDrawable(R.drawable.shadow); // 设置线的宽度 slidingMenu.setShadowWidthRes(R.dimen.shadow_width); // fragment去替换布局中节点 MenuFragment menuFragment = new MenuFragment(); // FragmentManager管理者 getSupportFragmentManager() // 开启事物 .beginTransaction() // 通过fragment去替换对应布局 .replace(R.id.menu, menuFragment, <span class="hljs-string">"MENU"</span>) // 提交事物 .commit(); }</code>
- MenuFragment代码
<code class="language-bash hljs has-numbering">public class MenuFragment extends Fragment { private ListView listView; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.menu_layout, container, <span class="hljs-literal">false</span>); listView = (ListView) view.findViewById(R.id.lv); <span class="hljs-keyword">return</span> view; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); ArrayList<String> strList = new ArrayList<String>(); <span class="hljs-keyword">for</span> (int i = <span class="hljs-number">0</span>; i < <span class="hljs-number">10</span>; i++) { strList.add(<span class="hljs-string">"第"</span> + i + <span class="hljs-string">"个条目"</span>); } // 设置数据适配器 listView.setAdapter(new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, strList)); } } </code>
- 布局配置
- activity_main 的布局配置
<code class="hljs xml has-numbering"><span class="hljs-tag"><<span class="hljs-title">RelativeLayout</span> <span class="hljs-attribute">xmlns:android</span>=<span class="hljs-value">"http://schemas.android.com/apk/res/android"</span> <span class="hljs-attribute">xmlns:tools</span>=<span class="hljs-value">"http://schemas.android.com/tools"</span> <span class="hljs-attribute">android:layout_width</span>=<span class="hljs-value">"match_parent"</span> <span class="hljs-attribute">android:layout_height</span>=<span class="hljs-value">"match_parent"</span> ></span> <span class="hljs-tag"></<span class="hljs-title">RelativeLayout</span>></span></code>
- menu_frame的配置
<code class="hljs xml has-numbering"><span class="hljs-pi"><?xml version="1.0" encoding="utf-8"?></span> <span class="hljs-tag"><<span class="hljs-title">LinearLayout</span> <span class="hljs-attribute">xmlns:android</span>=<span class="hljs-value">"http://schemas.android.com/apk/res/android"</span> <span class="hljs-attribute">android:layout_width</span>=<span class="hljs-value">"match_parent"</span> <span class="hljs-attribute">android:layout_height</span>=<span class="hljs-value">"match_parent"</span> <span class="hljs-attribute">android:orientation</span>=<span class="hljs-value">"vertical"</span> ></span> <span class="hljs-tag"><<span class="hljs-title">FrameLayout </span> <span class="hljs-attribute">android:id</span>=<span class="hljs-value">"@+id/menu"</span> <span class="hljs-attribute">android:layout_width</span>=<span class="hljs-value">"wrap_content"</span> <span class="hljs-attribute">android:layout_height</span>=<span class="hljs-value">"wrap_content"</span> ></span> <span class="hljs-tag"></<span class="hljs-title">FrameLayout</span>></span> <span class="hljs-tag"></<span class="hljs-title">LinearLayout</span>></span></code>
- memu_layout的布局配置
<code class="hljs xml has-numbering"><span class="hljs-pi"><?xml version="1.0" encoding="utf-8"?></span> <span class="hljs-tag"><<span class="hljs-title">LinearLayout</span> <span class="hljs-attribute">xmlns:android</span>=<span class="hljs-value">"http://schemas.android.com/apk/res/android"</span> <span class="hljs-attribute">android:layout_width</span>=<span class="hljs-value">"match_parent"</span> <span class="hljs-attribute">android:layout_height</span>=<span class="hljs-value">"match_parent"</span> <span class="hljs-attribute">android:orientation</span>=<span class="hljs-value">"vertical"</span> ></span> <span class="hljs-tag"><<span class="hljs-title">ListView </span> <span class="hljs-attribute">android:id</span>=<span class="hljs-value">"@+id/lv"</span> <span class="hljs-attribute">android:layout_width</span>=<span class="hljs-value">"match_parent"</span> <span class="hljs-attribute">android:layout_height</span>=<span class="hljs-value">"wrap_content"</span> ></span> <span class="hljs-tag"></<span class="hljs-title">ListView</span>></span> <span class="hljs-tag"></<span class="hljs-title">LinearLayout</span>></span></code>
SlidingMenu和ViewPager的冲突处理
-
当界面使用viewPager来填充的时候,会出现一个问题,不管在什么位置,我们都能够将SlidingMenu拖拽出来,影响了ViewPager的正常滑动,我们可能会要求只有在第一页的时候,能够将SlidingMenu拖拽出来,其他时候,可以在最边缘位置,或者根本不拖拽出来。这里需要设置这样的代码
-
// 设置ViewPager的监听事件
viewPager.setOnPageChangeListener(new OnPageChangeListener() {@Override public void onPageSelected(int arg0) { // 当当天条目是0的时候,设置可以在任意位置拖拽出SlidingMenu if (arg0 == 0) { getSlidingMenu().setTouchModeAbove( SlidingMenu.TOUCHMODE_FULLSCREEN); } else { // 当在其他位置的时候,设置不可以拖拽出来(SlidingMenu.TOUCHMODE_NONE),或只有在边缘位置才可以拖拽出来TOUCHMODE_MARGIN getSlidingMenu().setTouchModeAbove( SlidingMenu.TOUCHMODE_NONE); } } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { // TODO Auto-generated method stub } @Override public void onPageScrollStateChanged(int arg0) { } });
`
demo详见
SlidingMenu+ViewPager冲突解决
http://download.youkuaiyun.com/detail/zhiyuan0932/9501092
SlidingMenu简单配置
http://download.youkuaiyun.com/detail/zhiyuan0932/9500675