现在很多APP都在使用侧滑栏来显示一些功能菜单,通过手势滑出菜单栏拥有非常好的用户体验,今天我们就来集成github上很火而且很好用的开源项目 SlidingMenu。地址:https://github.com/jfeinstein10/SlidingMenu
本文结束会提供我们今天的demo下载地址,免积分(demo是通过鸿洋_的博客demo更改)
1.导入SlidingMenu_library.
要想使用SlidingMenu我们需要将它作为Library导入我们的workspace,然后在我们自己的项目里引用它,具体操作这里就不在写一遍了,具体参考:http://blog.csdn.net/yangyu20121224/article/details/9255829.(有的时候这个:android-support-v4.jar
包可能会有冲突,只要把我们项目里的这个jar包删除就可以了)
2.把主界面MainActivity 继承 SlidingFragmentActivity(如果你的项目已经在MainActivity里写了不少东西了,不用担心,直接把继承的Activity改成继承SlidingFragmentActivity就可以了,然后重写oncreate方法就可以了).
public class MainActivity extends SlidingFragmentActivity{ }
3.在initMenu方法里初始化SlidingMenu的各种属性,MainActivity里的代码如下:(添加后把错误修改完毕就可以,其中各种参数设置代码里或者其他博客都有很详细的解释).
package com.dqk.slidingmenu; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.View; import android.view.Window; import com.example.dqk_slidingmenu.R; import com.lxh.slidingmenu.lib.SlidingMenu; import com.lxh.slidingmenu.lib.app.SlidingFragmentActivity; public class MainActivity extends SlidingFragmentActivity{ private SlidingMenu menu; @Override public void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); this.requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); initMenu(); } private void initMenu() { Fragment leftMenuFragment = new MenuLeftFragment(); setBehindContentView(R.layout.left_menu_frame); getSupportFragmentManager().beginTransaction() .replace(R.id.id_left_menu_frame, leftMenuFragment).commit(); menu = getSlidingMenu(); menu.setMode(SlidingMenu.LEFT_RIGHT); // 设置触摸屏幕的模式 menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN); menu.setShadowWidthRes(R.dimen.shadow_width); menu.setShadowDrawable(R.drawable.shadow); // 设置滑动菜单视图的宽度 menu.setBehindOffsetRes(R.dimen.slidingmenu_offset); // menu.setBehindWidth() // 设置渐入渐出效果的值 menu.setFadeDegree(0.35f); // menu.setBehindScrollScale(1.0f); menu.setSecondaryShadowDrawable(R.drawable.shadow); // 设置右边(二级)侧滑菜单 menu.setSecondaryMenu(R.layout.right_menu_frame); Fragment rightMenuFragment = new MenuRightFragment(); getSupportFragmentManager().beginTransaction() .replace(R.id.id_right_menu_frame, rightMenuFragment).commit(); } public void showLeftMenu(View view) { getSlidingMenu().showMenu(); // getSlidingMenu().showContent(); } public void showRightMenu(View view) { getSlidingMenu().showSecondaryMenu(); } }
4.添加MenuLeftFragment,MenuRightFragment类,这里我们简单的显示一些ListView在这两个界面里,值得一提的是,集成SlidingMenu后侧边栏的滑动是不会和主界面的各种滑动有冲突的,
5.贴上我们MenuLeftFragment的代码:
package com.dqk.slidingmenu; import java.util.Arrays; import java.util.List; import com.example.dqk_slidingmenu.R; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.ListAdapter; import android.widget.ListView; import android.widget.Toast; public class MenuLeftFragment extends Fragment implements OnClickListener { private View mView; private ListView mCategories; private List<String> mDatas = Arrays .asList("聊天", "发现", "通讯录", "朋友圈", "订阅号"); private ListAdapter mAdapter; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { if (mView == null) { initView(inflater, container); } return mView; } private void initView(LayoutInflater inflater, ViewGroup container) { mView = inflater.inflate(R.layout.left_menu, container, false); mCategories = (ListView) mView .findViewById(R.id.id_listview_categories); mAdapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, mDatas); mCategories.setAdapter(mAdapter); mView.setOnClickListener(this); } @Override public void onClick(View v) { // TODO Auto-generated method stub Toast.makeText(this.getActivity().getApplicationContext(), "你点击了mView", Toast.LENGTH_SHORT).show(); //((MainActivity)getActivity()).getSlidingMenu().showContent(); ((MainActivity)getActivity()).getSlidingMenu().toggle(); } }
6.在我们的titlebar 也就是mView 我们添加了一个点击事件,点击之后弹出toast,而且会返回主界面,仔细看这行代码:
((MainActivity)getActivity()).getSlidingMenu().toggle();
我们是在得到MainActivity对象后执行的操作,所以如果你想在我们的侧边栏里操作跳转界面,或者操作一些数据例如sharedpreferences 等等,都可以通过getActivity来操作.
7.再把我们demo里的其他一些类和xml放到你的工程里就可以运行了.SlidingMenu有很多参数可以设定,自定义的空间很大,想实现一些动画,功能都非常的便捷,其他博客的资料也有很多,我就不一一赘述了,今天的博客就到这里;
(在我们的项目里dqk_slidingmenu是我们的工程包,slidingmenu_library就是library了,使用的时候导入就行.)